版本中何时出现冲突
从原始的分支master中分出分支feature1,对readme.txt
文件进行修改,原始文件如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Creating a new branch.
在feature1分支中添加一行:
Creating a new branch is quick AND simple.
然后切换回master分支,在readme.txt
中也添加一行:
Creating a new branch is quich & simple.
当前情况下,master分支和feature1分支中,都比分支分出去之前更新了一个版本,我们对当前的版本进行合并,输出如下:
ycwang@Y700:~/learngit$ git merge feature1
自动合并 readme.txt
冲突(内容):合并冲突于 readme.txt
自动合并失败,修正冲突然后提交修正的结果。
合并失败了,还提示合并过程中在readme.txt文件发生了冲突,我们查阅当前的git状态:
ycwang@Y700:~/learngit$ git status
位于分支 master
您的分支领先 'origin/master' 共 2 个提交。
(使用 "git push" 来发布您的本地提交)
您有尚未合并的路径。
(解决冲突并运行 "git commit")
(使用 "git merge --abort" 终止合并)
未合并的路径:
(使用 "git add <文件>..." 标记解决方案)
双方修改: readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
输出提示我们当前处于master分支,当前本地的版本还没有push到远程库,并且本地比远端领先两个版本。之后提示有尚未合并的路径,有两个解决方案,可以先人工解决冲突然后再提交,或者使用git merge --abort
取消合并操作。最后,提示了此次合并中出现冲突的文件。我们再次打开这个文件:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Creating a new branch.
<<<<<<< HEAD
Creating a new branch is quich & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
两个分支下对这个文件的修改,均被合并进入这个文件,还标记出来了哪部分来自哪个分支。我们直接把内容修改为如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
Creating a new branch.
Creating a new branch is quich and simple.
按照提示重新添加并提交:
git add readme.txt
git commit -m "comflict fixed"
再查看当前版本库下的情况:
ycwang@Y700:~/learngit$ git branch
feature1
* master
ycwang@Y700:~/learngit$ ls
readme.txt
ycwang@Y700:~/learngit$ git status
位于分支 master
您的分支领先 'origin/master' 共 4 个提交。
(使用 "git push" 来发布您的本地提交)
无文件要提交,干净的工作区
分支feature1还存在,但是冲突消失了。我们也可以用带参数的git log
查看分支的合并情况:
ycwang@Y700:~/learngit$ git log --graph --pretty=oneline --abbrev-commit
* e1c955b (HEAD -> master) conflict fixed
|\
| * d0e6106 (feature1) AND simple
* | 6536364 & simple
|/
* 4c2b68d branch test
* 5d9ff40 (origin/master) append GPL
* 4c93eef wrote a readme file
他记录了我们全部的修改记录,其中分支出现冲突的部分被用两个分支标记出来,现在他们合并成了同一个分支。最后,我们只需要删除feature1分支
git branch -d feature1