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


当前回答

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

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

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

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

其他回答

如果你经常做小承诺,然后开始看看承诺评论与 git log --merge. 然后 git diff 会向你展示冲突。

我喜欢opendiff - Git 也支持 vimdiff, gvimdiff, kdiff3, tkdiff, meld, xxdiff,从盒子中出现,你可以安装其他: git config merge.tool “your.tool” 将设置您所选择的工具,然后 git mergetool 失败的合并后将向您展示背景中的 diffs。

每当您编辑文件以解决冲突时, git 添加文件名将更新索引,而您的 diff 将不再显示。

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

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

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

下面是可能的使用案例,从顶部:

你会拖一些变化,但哦,你没有到目前为止:

git fetch origin
git pull origin master

From ssh://gitosis@example.com:22/projectname
 * branch            master     -> FETCH_HEAD
Updating a030c3a..ee25213
error: Entry 'filename.c' not uptodate. Cannot merge.

所以你更新并尝试一次,但有冲突:

git add filename.c
git commit -m "made some wild and crazy changes"
git pull origin master

From ssh://gitosis@example.com:22/projectname
 * branch            master     -> FETCH_HEAD
Auto-merging filename.c
CONFLICT (content): Merge conflict in filename.c
Automatic merge failed; fix conflicts and then commit the result.

所以你决定看看这些变化:

git mergetool

哦,我的,哦,我的,上流改变了一些事情,但只是用我的变化......不......他们的变化......

git checkout --ours filename.c
git checkout --theirs filename.c
git add filename.c
git commit -m "using theirs"

然后,我们试着最后一次。

git pull origin master

From ssh://gitosis@example.com:22/projectname
 * branch            master     -> FETCH_HEAD
Already up-to-date.

是的!

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

git checkout . --ours

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

git checkout . --theirs

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

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

git mergetool -t p4merge

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

git log --merge -p [[--] path]

它似乎并不总是为我工作,通常会显示两个分支之间不同的每一个承诺,即使在使用时也会发生这种情况 - 从命令中分开路径。

我要在这个问题上工作的是打开两个命令线,并在一个行中

git log ..$MERGED_IN_BRANCH --pretty=full -p [path]

而在另一方面

git log $MERGED_IN_BRANCH.. --pretty=full -p [path]

替换 $MERGED_IN_BRANCH 与我合并的分支和 [路径] 与相矛盾的文件. 这个命令将记录所有命令,在折叠形式,在(..)两个命令之间. 如果你留下一个侧空,如在上面的命令 git 将自动使用 HEAD (你合并的分支在这种情况下)。

这将允许你看到什么承诺进入文件在两个分支后,他们分开。