上一篇版本控制系统Git 进阶(一)
产生冲突
- 创建分支featureA与分支featureB(注:还不懂怎么创建分支的请查看版本控制系统Git 进阶(一)),然后使用
git branch
查看分支列表。
- 使用命令
git checkout featureA
切换到featureA,并在git.txt 添加“add featureA”,然后commit 在此分支上。 - 切换到主干分支master,并且使用
git merge featureA
,把featureA分支合并到master分支上。
解析:上图 1 + 表示有git.txt 有一行添加进来。使用cat git.txt
可以查看添加的内容,此处就不截图。 - 切换到分支featureB上,使用命令
cat git.txt
查看git.txt的内容,此时是空的,在git.txt上第一行添加内容add featureB,再commit到分支上。 切换到主分支master上,合并分支到featureB,看看提示。
解析:提示有冲突。打开git.txt看看有什么内容。
解析下,
=======
以上部分是当前HEAD的内容,一下部分是featureB的内容。我们理想的状态是这样
但是,为什么会那样?回想下,在分支featureA上添加内容到git.txt上时,是在第一行上添加的,而在分支featureB上添加内容到git.txt也是在第一行上的,合并的时候,出错了,第二次合并的时候,发现第一行有内容了,那么在fetureB的内容该放在哪里并不知道。此时应该解决冲突,手动去解决。
解决冲突
解决冲突很简单,打开git.txt编辑好后直接提交到master分支。使用git status
查看冲突解决了。
删除分支
featureA分支与featureB分支做的功能已经完成,并且也合并到主分支中,那么就应该删除这两个分支,这是个良好的习惯,使用命令git branch -d <name>
压缩历史 git rebase -i
在合并特性分支之前,如果发现已提交的内容中有些许拼写错误等,不妨提交一个修改,然后将这个修改包含到前一个提交之中,压缩成一个历史记录。
创建一个分支featureC
作为featureC分支的功能实现,在git.txt,添加一行文字并且故意是写错的。
其实应该写“add featureC”,故意写错成featuuuC,然后使用命令
git commit -am "add featureC"
提交到分支上。
注意:此刻我是直接使用git commit -am
,代替了 先add ,再commit。
- 修改拼写错误
修改刚刚的featuuuC为featureC,然后使用git diff
,查看修改后的差别
然后提交。
- 更改历史
实际上,你可能不需要在历史记录中看到这两天记录,因为你提早发现了错误,并作出改正,所以可以把这两次提交的记录压缩成一次。使用命令git rebase - i HEAD~2
进入到编辑器中。
接下来,将ec1a087 fix这条历史记录压缩到83e04a0这条记录中,只需要将ec1a087 fix 左侧的pick改为fixup,然后保存退出。
分支featureC的功能完成,这时候也应该删除了。