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


当前回答

这个答案是为那些像我这样的Vim用户添加一个替代方案,他们更喜欢在编辑器内做任何事情。


饰 饰 DR

此分類上一篇


Tpope 帶來了這個偉大的插件為 Vim 稱為 fugitive. 一旦安裝,你可以執行 :Gstatus 檢查有衝突的檔案和 :Gdiff 開啟 Git 在三路合併。

一旦在三路合并,逃生会让你得到你合并的分支中的任何一个变化,如下:

:diffget //2,从原始(HEAD)分支中获取变更: :diffget //3,从合并分支中获取变更:

一旦你完成了合并文件,输入 :Gwrite 在合并的泡沫中。

Vimcasts发布了一个很好的视频,详细解释了这些步骤。

其他回答

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

请遵循以下步骤来解决 Git 中的合并冲突:

查看 Git 状态: git 状态 获取 patchset: git fetch (从您的 Git commit 查看正确的 patch) Checkout 一个本地分支(temp1 在我的例子中在这里): git checkout -b temp1 Pull 最近的内容从主: git pull -rebase 起源主 启动 mergetool 并检查冲突并纠正它们......并检查与您当前分支的远程分支中的变化: git mergetool Chec

CoolAJ86的答案相当于一切. 如果您在同一代码中有两个分支的变化,您将不得不进行手动合并. 在任何文本编辑器中打开冲突中的文件,您应该看到下列结构。

(Code not in Conflict)
>>>>>>>>>>>
(first alternative for conflict starts here)
Multiple code lines here
===========
(second alternative for conflict starts here)
Multiple code lines here too    
<<<<<<<<<<<
(Code not in conflict here)

选择一个替代品或两者的组合,以一种方式,你想要新的代码是,同时删除平等的标志和角膜。

git commit -a -m "commit message"
git push origin master

当运行 git fetch 然后 git merge 当运行 git fetch 然后 git rebase 当运行 git pull (实际上相当于上述条件之一) 当运行 git stash pop 当应用 git patches (以电子邮件传输的文件出口的命令)

你需要安装一个合并工具,它是兼容的Git解决冲突. 我个人使用KDiff3,我发现它很好和方便. 你可以下载它的Windows版本在这里:

https://sourceforge.net/项目/kdiff3/文件/

然后设置 Git 配置以使用 KDiff3 作为其 mergetool:

$ git config --global --add merge.tool kdiff3
$ git config --global --add mergetool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
$ git config --global --add mergetool.kdiff3.trustExitCode false

$ git config --global --add diff.guitool kdiff3
$ git config --global --add difftool.kdiff3.path "C:/Program Files/KDiff3/kdiff3.exe"
$ git config --global --add difftool.kdiff3.trustExitCode false

(请记住将路径替换为 KDiff3 EXE 文件的实际路径。

$ git mergetool

然后它打开Kdiff3,并首先试图自动解决合并冲突。

下面是Kdiff3看起来怎么样:

$ git mergetool
No files need merging

奖金:

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

git pull - 回归

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

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

如果发生冲突,只需使用

git mergetool
git add conflict_file
git rebase --continue

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