我如何在我的 Git 存储库中解决合并冲突?


当前回答

简单地说,如果你知道其中一个存储库的变化并不重要,并且想解决所有变化,有利于另一个,请使用:

git checkout . --ours

以您的存储库的利益来解决更改,或者

git checkout . --theirs

以解决其他或主要存储库的利益的变更。

或者你将不得不使用一个 GUI 合并工具,一步一步通过文件,说合并工具是 p4merge,或者写下你已经安装的任何一个的名字。

git mergetool -t p4merge

完成文件后,您将不得不保存和关闭,以便下一个将打开。

其他回答

识别哪些文件处于冲突中(Git应该告诉你这一点)。 打开每个文件并检查Difs; Git demarcates它们. 希望它将是显而易见的哪个版本的每个区块保持。 你可能需要讨论它与同开发人员谁承诺的代码. 一旦你解决了冲突在一个文件 git 添加到_file. 一旦你解决了所有冲突,做 git rebase --continue 或 whateve

对于想要半手动解决合并冲突的 Emacs 用户:

git diff --name-status --diff-filter=U

显示所有需要冲突解决的文件。

打开这些文件中的每个一个,或所有一次,通过:

emacs $(git diff --name-only --diff-filter=U)

当您访问需要在 Emacs 中编辑的泡沫时,

ALT+x vc-resolve-conflicts

这将打开三个泡沫(矿,他们的,和输出泡沫)。导航按“n”(下一个区域),“p”(预测区域)。按“a”和“b”复制矿或他们的区域到输出泡沫,分别。

当完成时:按“q”。Emacs问你是否想保存这个泡沫:是的。

git add FILENAME

当所有类型的泡沫结束时

git commit

结束合并。

简单地说,如果你知道其中一个存储库的变化并不重要,并且想解决所有变化,有利于另一个,请使用:

git checkout . --ours

以您的存储库的利益来解决更改,或者

git checkout . --theirs

以解决其他或主要存储库的利益的变更。

或者你将不得不使用一个 GUI 合并工具,一步一步通过文件,说合并工具是 p4merge,或者写下你已经安装的任何一个的名字。

git mergetool -t p4merge

完成文件后,您将不得不保存和关闭,以便下一个将打开。

然而,答案是简单而令人沮丧的,合并冲突几乎总是可以手动解决的,如果你使用一个工具,如GitLab,GUI可能会帮助你在两个代码版本中找到差异,但在一天结束时,你必须决定哪条线应该保持,哪条线应该被删除。

一个简单的例子:程序员A和程序员B都将相同的 - 不同的修改 - 文件推到一个遥远的存储库.程序员A打开一个合并请求,GitLab强调了两个版本之间发生冲突的代码几条线。

我喜欢使用WinMerge(免费工具),它既是整个目录树的比较/混合,而且是整个目录树的个别文件(s)比较/混合。

解决的步骤可以是:

也就是说,没有魔法的方式来解决 Git 合并的冲突,除了手动观察每个人对相同的源文件(s)做了什么。

这就是我所想的。

注意: WinMerge 创建.bak 文件.. 并且您不希望它们复制到源控制 AzOps, TFS 等,所以如果您确信您已经完成了正确的编辑,删除.bak 文件。