在应用补丁时,有什么方法可以解决冲突吗?

Ken*_*130 112 git git-am git-apply

我在窗户上.

由于各种原因,我们有多个不同svn分支的git实例.

很多时候我想修复存储库A中的问题,生成补丁并将其应用到存储库B.除非存在冲突,否则这种方法很好.

重新定位时,我只需右键单击该文件夹并使用tortioseGit并选择解析选项.这带来了一个很好的gui,让我解决我的冲突.

有没有办法用拒绝的补丁块完成这个?

这是我目前创建/应用补丁的方法

git format-patch master --stdout > c:\\patch\\file.patch
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch
Run Code Online (Sandbox Code Playgroud)

g19*_*tic 222

要生成补丁,请执行以下操作:

git format-patch --stdout first_commit^..last_commit > changes.patch
Run Code Online (Sandbox Code Playgroud)

现在,当您准备应用补丁时:

git am -3 < changes.patch
Run Code Online (Sandbox Code Playgroud)

-3如果存在冲突,将进行三方合并.在这一点上,你可以做git mergetool,如果你想去一个GUI或只是手动使用vim(标准合并文件<<<<<<,||||||,>>>>>>解决冲突).

  • `git apply -3 changes.patch`似乎对我也有用 (11认同)
  • 将`--ignore-whitespace --ignore-space-change`添加到`git am`可能很有用.没有它我没有经历过琐碎的合并. (2认同)
  • 即使补丁没有完全应用,我仍然从`git mergetool` 中得到“没有文件需要合并”。相反,我必须找到使用的原始补丁的基础提交,在其之上应用(幸运的是我的仓库有这个),然后重新定位。 (2认同)
  • 我遇到与@jozxyqk相同的问题。git am -3和git apply -3都不会将冲突标记放到我的文件中,即使我收到诸如有冲突的应用补丁到configure.ac的消息和错误:补丁失败:。 ..`。这是在git 2.17.1上。也许当根本无法修补某些文件时,git会回滚吗? (2认同)
  • 我和@nh2 遇到了同样的问题,你有没有发现这个问题? (2认同)

kva*_*aps 13

只需使用

git apply -3 <patch_name>
Run Code Online (Sandbox Code Playgroud)

它会让你解决冲突


mpl*_*plf 10

如果在应用补丁,重新定位或合并时经常遇到相同的冲突集,则可以使用git rerere(重用记录的分辨率)函数.这允许您根据过去如何解决冲突来预先定义冲突的解决方式.有关其工作原理的详细信息,请参见http://git-scm.com/blog/2010/03/08/rerere.html.


ams*_*ams 5

TortoiseGit 有一个合并功能,可以打开补丁文件。

有它的照片在这里