Git-如何解决合併冲突

冲突原因

同时修改同一个档案的同一行code,就会发生冲突。
若修改同一个档案的不同行code,就会成功合併。
这个逻辑很容易理解,因为同时修改同一个地方,git根本不知哪个才是正确的内容。

产生冲突

延续Git-合併分支。

现在,产生一个发生冲突的情况。

建立feature分支。
http://img2.58codes.com/2024/20112573wdZljIatiw.png

线图。
http://img2.58codes.com/2024/201125735ndubC4UjU.png

在master分支,将a.txt内容的第一行改为123,再commit。
http://img2.58codes.com/2024/20112573UN4iWox3eS.png

线图。
http://img2.58codes.com/2024/20112573yVVvuesUqf.png

在feature分支,再将a.txt内容的第一行改为456,再commit。
http://img2.58codes.com/2024/20112573ntlETmXCQx.png

线图。
http://img2.58codes.com/2024/20112573LGtergKgvQ.png

接下来,将master分支合併feature分支。
http://img2.58codes.com/2024/20112573jReCdbEqPQ.png
果然发生冲突了。

解读冲突讯息

Auto-merging a.txt:
表示git正在自动合併a.txt这个档案。
CONFLICT (content) : Merge conflict in a.txt:
合併冲突的种类属于内容冲突「CONFLICT (content)」,
发生冲突的档案是a.txt「Merge conflict in a.txt」。
Automatic merge failed; fix conflicts and then commit the result.:
自动合併错误,请修复冲突,然后再commit结果。

看看git status的讯息
http://img2.58codes.com/2024/20112573WecPQlnLrP.png
You have unmerged paths.
你有一个未合併的路径。意味着,目前的合併尚未完成。
分支显示(master|MERGING)也明确指示正处于合併状态。

解决方案

git status的讯息提示,有两个解决方式。
http://img2.58codes.com/2024/201125738CEIHPM4zB.png
(fix conflicts and run "git commit")
修复冲突,再commit。
(use "git merge --abort" to abort the merge)
放弃这次的合併。

放弃合併

我们先放弃这次合併,回到合併前的状态。
http://img2.58codes.com/2024/20112573zEA8r8XBEz.png
重点注意,讯息显示nothing to commit, working tree clean,
这才是正常状态,表示目前都没有东西需要commit,工作目录是乾净的状态。

解决冲突

再一次合併,依旧会发生冲突。
http://img2.58codes.com/2024/20112573jc1xIUbnkW.png

讯息Unmerged paths:
(use "git add <file>..." to mark resolution)
git会提示你,add 冲突的档案,标记为解决方案。
下面红字,就代表冲突的档案,并特别标示both modified。

打开a.txt

<<<<<<< HEAD123=======456>>>>>>> feature

会发现,内容被git修改了。
这是因为遇到冲突时,git会将冲突的档案内容改成它自订的格式,显示所有的修改内容。

表示目前所在分支的档案内容。

<<<<<<< HEAD123

表示目前feature分支的档案内容。

456>>>>>>> feature

中间以=======相隔

因为git不会知道,哪个才是我们要的code,预设就是全部留下来。
但,这绝不会是我们需要的,一定都是手动修改完后再合併。
假设将code修改成这样,储存。

123456

修改完成后,执行add,再看一次状态。
http://img2.58codes.com/2024/20112573daBsE7IFxO.png
这时讯息显示All conflicts fixed but you are still merging.
表示冲突已解决,但注意看分支状态,目前还处在合併中,所以仍然需要进行合併。
git有给提示:(use "git commit" to conclude merge)
可以执行git commit来结束commit。
http://img2.58codes.com/2024/20112573u9kDwRLOvu.png
一样会跳出合併讯息,储存后离开。
http://img2.58codes.com/2024/20112573tXdjYg9lhM.png

成功合併

git log
http://img2.58codes.com/2024/20112573OmoWXZnNby.png

线图。
http://img2.58codes.com/2024/20112573RrS34ZgA8e.png

工作目录是处于乾净的状态。
http://img2.58codes.com/2024/20112573jpsiYI543c.png

本文为观看网路教学的学习笔记。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章