1. 冲突产生
- 首先我们创建本地git仓库,并添加
test.txt
文件,如下:
$ git init
//创建默认分支
$ git switch --create main
$ touch test.txt
$ git add test.txt
$ git commit -m "Initial commit"
- 创建开发分支
dev
$ git checkout main
$ git checkout -b dev
在dev
分支修改test.txt
,内容如下:
Hello
然后提交
$ git add test.txt
$ git commit -m "修改test.txt"
- 切 回到main分支,修改
test.txt
的内容为Hello World
,然后提交:
$ git checkout main
//修改test.txt文件,内容如下
Hello World
//然后提交
$ git add test.txt
$ git commit -m "修改test.txt"
- 合并dev分支
此时,main分支和dev分支都修改了test.txt
文件,然后合并dev分支到main分支,Git告诉我们,test.txt
文件存在冲突,必须手动解决冲突后再提交
$ git merge dev
//输出日志如下
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
- 使用
git status
可以查看冲突的文件
On branch main
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: test.txt
no changes added to commit (use "git add" and/or "git commit -a")
2. 解决合并冲突
查看冲突文件test.txt
,Git用<<<<<<<
,=======
,>>>>>>>
标记出不同分支的内容,内容如下:
<<<<<<< HEAD
Hello World
=======
Hello
>>>>>>> dev
此时,就可以根据情况选择test.txt保留的内容。现在我们修改test.txt
,保留Hello World
,内容如下:
Hello World
再提交
$ git add test.txt
$ git commit -m "解决冲突"
此时,再使用git status命令查看,发现已经没有冲突提示了。
3. 关于合并冲突
在git中,出现冲突的场景有很多,git merge、git pull、git rebase等命令都有可能出现冲突,但是他们的本质是相同的:在合并文件时同一个文件的同一个位置都修改了,并且内容不同;也即两个已经提交的分支的相同文件相同位置的不同操作进行了合并,所以产生了冲突。 然后git会提示 :
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.
如何解决冲突?就需要查看冲突的文件,修改冲突内容,然后重新提交。
网友评论