基本的合并冲突处理

如果你在两个分支上都改了同一个文件的同一部分内容,Git就没办法干净的合并这两个分支。举例如果我们工程里只有一个"a.txt,里面的内容是

基本的合并冲突处理

目前只有两次普通的提交,和主分支master

$ git log --oneline --decorate --graph --all * e3bf2f8 (HEAD -> master) 提交2 * 6308f04 提交1

基本的合并冲突处理

现在,我们创建分支B并进入

$ git branch b $ git checkout b Switched to branch 'b'

我们修改a文件的内容为

基本的合并冲突处理


然后提交

$ git log --oneline --decorate --graph --all * 7d27397 (HEAD -> b) 分支b的第一次提交 * e3bf2f8 (master) 提交2 * 6308f04 提交1

基本的合并冲突处理

然后我们回到master分支

$ git checkout master Switched to branch 'master'

修改a的内容为

基本的合并冲突处理

提交

$ git commit -a -m "master分支修改了a" [master f5ab6c5] master分支修改了a 1 file changed, 1 insertion(+), 1 deletion(-)

查看现在的分支情况

$ git log --oneline --decorate --graph --all * f5ab6c5 (HEAD -> master) master分支修改了a | * 7d27397 (b) 分支b的第一次提交 |/ * e3bf2f8 提交2 * 6308f04 提交1

基本的合并冲突处理

我们尝试合并

$ git merge b Auto-merging a.txt CONFLICT (content): Merge conflict in a.txt Automatic merge failed; fix conflicts and then commit the result.

Git并没有自动创建新的合并提交。它会暂停整个合并过程,等待你来解决冲突。在发生合并冲突后,要查看哪些文件没有被合并,可以执行git status

$ git status On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: a.txt no changes added to commit (use "git add" and/or "git commit -a")

可以看到,a.txt被both modified(两个分支都修改)了。打开a文件,可以看到

基本的合并冲突处理


其中HEAD版本的内容显示在上半部分(======以上),b分支的内容则在下半部分。其中HEAD指向的是master分支,因为在执行merge前我们已经切换到了master分支。
我们现在要将a的这五行内容换成

基本的合并冲突处理


再次提交,Git便会开始合并

$ git commit [master 8b57566] Merge branch 'b'

再次查看分支

$ git log --oneline --decorate --graph --all * 8b57566 (HEAD -> master) Merge branch 'b' |\ | * 7d27397 (b) 分支b的第一次提交 * | f5ab6c5 master分支修改了a |/ * e3bf2f8 提交2 * 6308f04 提交1

基本的合并冲突处理

至此,冲突解决

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgypjd.html