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


当前回答

我明白什么是合并冲突,但当我看到Git diff的输出时,这对我一开始就看起来很荒谬:

git diff
++<<<<<<< HEAD
 + display full last name boolean in star table
++=======
+ users viewer.id/star.id, and conversation uses user.id
+
++>>>>>>> feat/rspec-tests-for-cancancan

但是,这里是帮助我的一点:

<<<<<和 =======之间的一切都是在一个文件中的一切,而在 =======和 >>>>>之间的一切都是在另一个文件中的一切,所以你必须做的就是打开与合并冲突的文件,并从任何分支中删除这些线条(或者只是让它们相同),合并将立即成功。

其他回答

对于使用 Visual Studio 的用户(Visual Studio 2015 在我的情况下)

关闭您的项目在Visual Studio. 特别是在大型项目,Visual Studio倾向于在使用UI合并时脱离。 立即在命令中进行合并. git checkout target_branch git merge source_branch 然后在Visual Studio中打开项目,然后转到Team Explorer → Branch。

我一直遵循下面的步骤,以避免冲突。

git checkout master (到主分支) git pull (更新你的主分支以获得最新的代码) git checkout -b mybranch (检查一个新的分支,并开始在该分支工作,以便你的主分支总是留在顶部) git add. and git commit and git push (在你的本地分支后你的变化) git checkout master (回到你的主分支)

现在你可以做同样的事情,并保持你想要的多家当地分支机构,并同时工作,只要在需要时对你的分支机构进行吉特支票。

奖金:

在上面的回答中,谈论拖动 / 混合 / 混合,我想分享一个有趣而有成效的技巧,

git pull - 回归

上面的命令是我Git生活中最有用的命令,这节省了很多时间。

在推到远程服务器之前,尝试 git pull --rebase 而不是 git pull 和手动合并,它将自动同步最新的远程服务器变更(使用一个 fetch + 合并),并将您的本地最新的合并放在 Git 记录的顶部。

如果发生冲突,只需使用

git mergetool
git add conflict_file
git rebase --continue

查找详细信息: “git pull –rebase” 做什么?

对于想要半手动解决合并冲突的 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

结束合并。

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

解决的步骤可以是:

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

这就是我所想的。

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