Git命令 - git合并冲突

2023-07-19  本文已影响0人  BlueSocks

1. 冲突产生

  1. 首先我们创建本地git仓库,并添加test.txt文件,如下:
$ git init
//创建默认分支
$ git switch --create main
$ touch test.txt
$ git add test.txt
$ git commit -m "Initial commit"

  1. 创建开发分支dev
$ git checkout main
$ git checkout -b dev

dev 分支修改test.txt,内容如下:

Hello

然后提交

$ git add test.txt
$ git commit -m "修改test.txt"

  1. 切 回到main分支,修改test.txt 的内容为Hello World ,然后提交:
$ git checkout main
//修改test.txt文件,内容如下
Hello World
//然后提交
$ git add test.txt
$ git commit -m "修改test.txt"

  1. 合并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. 

  1. 使用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.

如何解决冲突?就需要查看冲突的文件,修改冲突内容,然后重新提交。

上一篇下一篇

猜你喜欢

热点阅读