Git学习笔记三:Git分支

来源:互联网 发布:软件系统工程师培训 编辑:程序博客网 时间:2024/06/05 13:26
git默认只有一条主分支,称为master,master上一般是稳定的系统,当我们开发新功能的时候,应该新建一个分支(branch),在分支下面做开发工作,确认分支下的系统通过测试之后,再将分支合并到master主分支上。原则上,可以新建多个分支,各分支上的工作互不干扰。

1、如何新建并切换分支
$git checkout -b mybranch
这条命令相当于执行了以下两条命令
$git branch mybranch
$git checkout mybranch

Switched to a new branch 'mybranch'
M test.txt

2、如何查看现有的分支
$git branch
master
* mybranch
我们可以看出,mybranch左边有一个*号,证明目前的指针是在mybranch分支上的,所以我们所做的commit操作也是在mybranch上面执行,不会影响master

3、合并分支
我们先把text.txt写上hello world,执行add和commit指令。如下:
$ git add test.txt
$git commit -m "提交helloworld"
然后执行
$git checkout master
此时我们可以发现,test.txt里面的hello world文本信息消失了!由于我们切换回了主分支,mybranch分支上的修改是不会对主分支产生影响的,所以接下来,我们需要将mybranch分支上的修改合并到master主分支上。
$git merge mybranch
Updating 03ea170..9b520e0
Fast-forward
test.txt | 1 +
1 file changed, 1 insertion(+)
现在打开text.txt,就可以看到hello world了。这里需要注意到的一点是,这里采用了fast-forward的模式,这种模式合并是不会产生合并历史记录的,也就是不能通过git log查到有这条合并记录,可以加上--no-ff强势不使用fast-forward模式:
$git merge --no-ff -m "合并分支" mybranch

4、删除分支
当我们开发完功能并将分支合并到master主分支上之后,mybranch分支就可以删掉了。
$git branch -d mybranch

5、产生冲突
在多人协作的时候,冲突是不可避免的,冲突的概念这里就不讲了,我们来模拟一个版本冲突。
$git checkout -b dev
修改test.txt文本,追加字符串“dev branch”,此时文本内容为"hello world dev branch"
$git add test.txt
$git commit -m "dev branch commit"

切换回master主分支
$git checkout master
修改test.txt文本,追加字符串“master”,此时文本内容为"hello world master"
$git add test.txt
$git commit -m "master branch commit"

$git merge dev
此时就会出现冲突提示,因为dev分支和主分支都有修改文件,而且它们提交的上一个版本是相同的,这时候就会有冲突,提示信息如下:
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.

我们打开test.txt,就会发现里面的文本如下:
<<<<<<< HEAD
hello world master
=======
hello world dev branch
>>>>>>> dev
意思是当前版本信息为hello world master,而dev分支信息为hello world dev branch,它们合并的时候起了冲突,我们使用
$git status
查看的时候,会看到红色的字体信息:both modified: test.txt

6、解决冲突
手动打开test.txt并对内容修改为"hello world!",修改完成后执行以下命令,其中,git add命令就是标记冲突已解决
$git add test.txt
$git commit -m "conflict fix"
$git status
就可以看到如下内容,证明冲突已经得到解决,并且工作空间是干净的。
nothing to commit, working tree clean
接下来我们可以使用如下命令查看合并历史情况:
git log --graph --pretty=oneline --abbrev-commit
* 875fe91 (HEAD -> master) conflict fix
|\
| * 3fbc131 (dev) dev branch commit
* | 542ceca master branch commit
|/
* 9b520e0 提交hello world

最后,合并之后记得可以删掉dev分支,大功告成