Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。Git的Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
Git在2005年正式上线,一直到现在位置变成了版本控制中的杠把子,它与CVS,SVN等版本控制工具不同,他采用了分布式版本库的方式,不用服务器端软件支持也可使用。
分布式的设计,适合分布式开发,强调个体,速度快,灵活。但是在好用的同时,Git也是比较难懂的,从Git的内部机制来说,Git比市面上所有的版本控制工具都复杂。
在介绍分布式的时候首先要介绍集中式版本控制,最常见的就是SVN,SVN有一个中央的代码管理库,每次干活的时候都需要从中央服务器拿出得到最新的版本,如果服务器丢失了,那么所有的都丢失了,你本地客户端仅仅保存了当前的版本信息,并且你的所有回滚操作等都需要服务器的支持,对网络依赖很大,如果断网则无法进行其他操作。
分布式版本控制他没有中央仓库,你也可以理解为每一个人哪里的代码都是中央仓库,这样每个人的点好上面都是一个完整的版本库,这样你工作的时候就不需要一定保持网络才能干活,因为本机上面已经是一个完整的代码库了,可以自由的在本地回滚提交等。并且Git还可以将自己再工作区间做的修改提交到本地仓库作为暂存,在有网络的情况下将自己本地版本仓库推送到远程仓库进行合并高效并且可控。
集中式它们都有一个主版本号,所有的版本迭代都以这个版本号为主,而分布式因为每个客户端都是服务器,git没有固定的版本号,但是有一个由哈希算法算出的id,用来回滚用的,同时也有一个master仓库,这个仓库是一切分支仓库的主仓库,我们可以推送提交到master并合并到主仓库上,主仓库的版本号会迭代一次,我们客户端上的git版本号无论迭代多少次,都跟master无关,只有合并时,master才会迭代一次。
这里选择的是Centos操作系统进行安装
# 使用 yum 命令进行安装
yum install -y git
# 安装成功后查看git版本
git --version
安装指定的版本的git
yum install wget curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc -y
yum install gcc perl-ExtUtils-MakeMaker -y
cd /usr/local/src
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
tar -xvf git-2.9.5.tar.gz
cd git-2.9.5/
./configure --prefix=/usr/local/git all
make -j && make install
echo "export PATH=$PATH:/usr/local/git/bin" >> ~/.bashrc
source ~/.bashrc
在安装完成后需要执行最简单的用户配置
# 查看 Git 配置
git config --list
# 配置全局用户名
git config --global user.name "Your Name"
# 配置全局邮箱
git config --global user.email "[email protected]"
a. 使用 git init
命令来创建一个仓库
b. 创建一个文件,然后使用 git add
命令来提交到暂存区
c. 使用 git commit
命令来把你本次的创建或者修改提交到本地仓库中
d. 使用 git push
命令来把你的本地仓库内容推送到远程仓库中
e. 使用 git marge
命令来进行本地仓库和远程仓库代码进行合并
本地仓库其实就是一个文件夹.git
文件夹,.git
文件夹的创建需要使用git init
命令来创建,这样才能构建出来一个符合git规范的本地仓库。总结的来说创建本地仓库有两种方式,一种是使用git inti
命令来创建一个仓库,另一种是使用git clone xxxx
拉取一个远程仓库来创建一个仓库。这两种都可以。
# 1. 在本地直接创建一个仓库
mkdir logic && cd logic
git inti
# 初始化空的 Git 版本库于 /root/logic/.git/
# 2. 从远程仓库拉取一个
git clone xxxx
如果你的git语言环境是中文,那么修改成为英文可以在你的
~/.bashrc 或者 ~/.bash_profile
文件中添加alias git='LANG=en_GB git'
来进行语言的配置
使用 touch
命令创建一个文件,并使用add
命令把文件提交到暂存区。提交到暂存区的文件并没有到本地仓库中,只是在暂存中,在被人marge
合并代码时并不能获取到暂存区的文件或者修改内容。
# 创建一个文件
touch README.md
touch test.txt test1.txt test2.txt
# 提交文件到暂存区
git add README.md
# add 命令后面是可以跟参数 [file] [dir] 都可以
# git add . # .表示的是当前文件夹中的所有文件
git add test1.txt test2.txt # add 多个文件
现在使用git status
命令来查看文件的状态
git status
# On branch master 在master节点
#
# Initial commit
#
# Changes to be committed: 已经追再到文件并需要提交的文件
# (use "git rm --cached ..." to unstage)
#
# new file: REMAD.md
# new file: test1.txt
# new file: test2.txt
#
# Untracked files: 未追踪到的文件
# (use "git add ..." to include in what will be committed)
#
# test.txt 这个文件没有使用add命令提交到暂存区,所以没有追踪到,
注意: 没有使用
add
命令暂存的文件或者文件夹,在切换分支的时候不会随着分支的切换而切换文件。如果在一个分支上面进行了add
暂存,那么切换到其他分支的时候则会不显示,当分支再次切换回来时则可以显示。
提交到本地仓库的命令是git commit -m
,这个命令可以跟多个参数,如果不指定提交的文件,那么默认会把所有的暂存区的内容提交到本地仓库中。-m
这个参数是对本次提交的描述,git是要求对每次的提交进行描述。
# 1. 使用 git commit -m 命令进行提交,提交所有add过的文件和改动
git commit -m 'fist commit'
# 2. 使用 git commit -a 命令进行提交,-a命令会把没有 add 的文件也进行提交
git commit -am 'fist commit'
git中文件分为四种状态,如下所示
查看文件状态的命令
# 使用 git status 查看文件的状态
git statu
# 或者
git status -s
使用 git log
命令来查看提交的日志
# 使用 git log 命令
git log
文件回滚的命令是 git reset
,文件回滚分为三种类型 --soft
,--mixed
,--hard
三种类型
--soft
就是仅仅将头指针恢复,已经add的暂存区以及工作空间的所有东西都不变。--mixed
就将头恢复掉,已经add的暂存区也会丢失掉,工作空间的代码什么的是不变的。--hard
那么一切就全都恢复了,头变,aad的暂存区消失,代码什么的也恢复到以前状态。# git log 查看日志
git log
# 使用 head 命令回滚
git reset --head 要回滚的id
# HEAD是指向当前仓库的,如果回滚到上一个版本这样即可
git reset --hard HEAD^
# HEAD~3代表回滚master前三个版本
git reset --hard HEAD~3
# 回滚单个文件
git log filename # 查看单个文件的日志
git reset 要回滚的id filename
如果你删除/修改
一个文件,然后并不想提交这个删除/修改
,那么只需要使用 git checkout
命令即可
git checkout file # 即可重新的从当前分支里面拉取一个文件出来
git reflog # 这个命令可以查看版本库中的所有的历史包括 回滚的历史
git的分支是通过branch
关键字来进行处理的
# 查看所有的分支
git branch -a
# 创建一个分支
git branch dev
# 创建一个新的分支并切换到创建分支
git checkout -b test
# 切换分支
git checkout dev
# 删除一个分支
git branch -D dev
# 删除一个远程的分支
git push origin --delete dev
# 修改一个分支名称
git branch -m dev devl
当我们需要合并分支的时候,被合并的分支我们首先要切换过去,比如dev分支合并到test分支上去,那么我们第一步需要切换到test分支上去,然后执行 git merge 命令即可
git checkout test
git merge dev
如果你需要链接远程分支,那么需要你增加远程分支的url
git remote add origin https://xxxxxxx # url为你的远程仓库的地址
git push -u origin master # 提交代码到远程仓库中
# push:将本地仓库与远程仓库合并
# -u:将本地仓库分支与远程仓库分支一起合并,就是说将master的分支也提交上去,这样你就可以在远程仓库上看到你在本地仓库的master中创建了多少分支,不加这个参数只将当前的master与远程的合并,没有分支的历史记录,也不能切换分支
# origin:远程仓库的意思,如果这个仓库是远程的那么必须使用这个选项
# master:提交本地matser分支仓库
git clone https://xxxx # 默认检出的是master分支下面的代码
git clone -b dev https://xxxx # 检出的是dev分支的代码