我如何在我的 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

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

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

其他回答

你可以以一些方式解决合并冲突,因为其他人已经详细说明了。

我认为真正的关键是知道如何在本地和远程存储库中流动的变化。 关键是理解跟踪分支. 我发现我认为跟踪分支是我之间的“中间失落的片段”我的本地,实际的文件目录和远程定义为起源。

而不是:

git add .
git commit -m"some msg"

相反,我做:

git add file,file2,file3...
git commit # Then type the files in the editor and save-quit.

因此,你更有意识到哪些文件被添加,你也可以查看列表,并在使用编辑器为消息时思考更多。

[更新 - 随着时间的流逝,我已经更换到:

git status # Make sure I know whats going on
git add .
git commit # Then use the editor

)

此外(更重要的是你的情况),我试图避免:

git pull

git pull origin master.

git checkout master
git fetch   
git rebase --hard origin/master # or whatever branch I want.

你也可能會發現這有用:

git 分支, fork, fetch, merge, rebase 和 clone,什么是差异?

查看如何呈现冲突或,在 Git 中, git 合并文档了解合并冲突标记是什么。

此外,如何解决冲突部分解释如何解决冲突:

看到冲突后,你可以做两件事: 决定不合并. 唯一的清洁你需要是重新设置指数文件到头条承诺逆转 2. 和清理工作树的变化由 2 和 3; git merge --abort 可以用于此。

您还可以阅读关于合并冲突标记,以及如何在Pro Git书部分中解决它们的基本合并冲突。

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

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

如果你想从分支测试到大师合并,你可以遵循以下步骤:

步骤1:进入分支

git checkout test

步骤2:

git pull --rebase origin master

步骤3:如果有任何冲突,请转到这些文件来修改它。

步骤4:添加这些变化

git add #your_changes_files

步骤5:

git rebase --continue

步骤6:如果仍然存在冲突,再回到步骤3;如果没有冲突,就如下:

git push origin +test

步骤7:然后测试和主人之间没有冲突,你可以直接使用合并。

合并冲突发生时,同时对文件进行更改,这里是如何解决。

下面是简单的步骤,当你进入冲突状态时要做什么:

对于实用的教程,请检查: 剧本 5 - 解决混合冲突 由 Katacoda。

差异化

我成功地使用了DifMerge,它可以在Windows、macOS和Linux/Unix上视觉上比较和合并文件。

此分類上一篇

圖片來源:DifMerge(Linux屏幕拍攝)

git mergetool -t diffmerge .

马克思

brew install caskroom/cask/brew-cask
brew cask install diffmerge

而且,你可能(如果没有提供)需要下列额外简单的插槽放置在你的PATH(例如 /usr/bin):

#!/bin/sh
DIFFMERGE_PATH=/Applications/DiffMerge.app
DIFFMERGE_EXE=${DIFFMERGE_PATH}/Contents/MacOS/DiffMerge
exec ${DIFFMERGE_EXE} --nosplash "$@"

-Alt-Up/Down to jump to previous/Next changes. -Alt-Left/Right to accept change from left or right. -Alt-Up/Down to jump to previous/Next changes. -Alt-Left/Right to accept change from left or right