Git分支(5/5) -- 解决合并的冲突

时间:2023-03-09 04:56:59
Git分支(5/5) -- 解决合并的冲突

Git分支(5/5) -- 解决合并的冲突

如果两个分支上都对同一个文件进行了修改, 那么就有可能发生冲突.

首先创建一个分支, 并切换到该分支上:

Git分支(5/5) -- 解决合并的冲突

然后修改index.html, 修改几个地方吧.

然后查看状态, 并commit:

Git分支(5/5) -- 解决合并的冲突

然后切换到master, 并编辑同一个文件:

Git分支(5/5) -- 解决合并的冲突

而这时index.html并不是realwork分支修改后的样子, 而是修改之前的样子:

Git分支(5/5) -- 解决合并的冲突

然后修改index.html, 修改几处可能引起冲突的地方.

commit:

Git分支(5/5) -- 解决合并的冲突

然后查看log:

Git分支(5/5) -- 解决合并的冲突

接下来最应该做的就是diff:

Git分支(5/5) -- 解决合并的冲突

也可以使用可视化工具进行diff:

Git分支(5/5) -- 解决合并的冲突

下面进行合并:

Git分支(5/5) -- 解决合并的冲突

不出所料, 冲突发生了, 自动合并失败.

现在的状态, 应该叫做Merging状态.

现在打开index.html是这样的:

Git分支(5/5) -- 解决合并的冲突

可以看到两处冲突, 每处都有HEAD(master)版的和realwork分支版的.

上图我使用的是Visual Studio Code, 可以点击上面的按钮来进行冲突的解决, 也可以手动修改文件进行解决.

但是在这里我使用我配置好的mergetool:

git mergetool. 这个命令将会打开p4merge(我本机配置的mergetool):

Git分支(5/5) -- 解决合并的冲突

按图示操作, 点击图标选择不同的版本, 最后点击保存即可.

关闭p4merge:

Git分支(5/5) -- 解决合并的冲突

然后commit:

Git分支(5/5) -- 解决合并的冲突

commit之后, 状态就不再是merging了, 但是会出现一个未被追踪的文件:

Git分支(5/5) -- 解决合并的冲突

这是因为在解决冲突的时候, git会保存一个带有触痛的原始版本, 以备不时之需:

Git分支(5/5) -- 解决合并的冲突

但是.orig文件是不应该被追踪的, 所以需要添加到.gitignore文件中:

Git分支(5/5) -- 解决合并的冲突

然后查看状态:

Git分支(5/5) -- 解决合并的冲突

这次只有.gitignore发生了变化.

commit:

Git分支(5/5) -- 解决合并的冲突

最后可以删除 realwork 分支了:

Git分支(5/5) -- 解决合并的冲突

查看log:

Git分支(5/5) -- 解决合并的冲突

Ok.