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


124

我在窗户上。

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

很多时候,我想修复存储库A中的问题,生成补丁,并将其应用到存储库B中。除非有冲突,否则此方法可以正常工作。

在重新定基时,我只需右键单击该文件夹并使用tortioseGit并选择“ resolve”选项。这带来了一个不错的GUI,可让我解决冲突。

有什么方法可以通过拒绝补丁块来完成此任务吗?

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

git format-patch master --stdout > c:\\patch\\file.patch
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch

3
当所有修补选项均失败时,我通常会手动执行此操作
stdcall

如果合并失败,那是因为程序无法弄清楚如何明确地执行合并。您应该获得带有<<<<,===,>>>>集的文件,并且必须手动解决它们。
tacaswell 2013年

是的,当您说几百个rej帅哥时,用手做的确是皮塔饼。
Kenoyer130 2013年

那是您要使用git mergetool自己选择的gui进行3路合并的时候(我偏爱Windows上的kdiff)...
g19fanatic 2013年

Answers:


254

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

git format-patch --stdout first_commit^..last_commit > changes.patch

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

git am -3 < changes.patch

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


3
这可能是添加有用--ignore-whitespace --ignore-space-changegit am过。如果没有它,我的合并就微不足道了。
angularsen,2015年

12
git apply -3 changes.patch似乎也为我工作
peterflynn 2015年

1
即使补丁不能很好地应用,我仍然会从中获得“无需合并文件” git mergetool。取而代之的是,我不得不找到所使用的原始补丁的基本提交,在此之上进行应用(幸运的是,我的仓库有这个),然后重新进行基准设置。
jozxyqk

4
我遇到与@jozxyqk相同的问题。无论是git am -3git apply -3将实际下降冲突标记为我的文件,即使我得到的消息像Applied patch to 'configure.ac' with conflicts.error: patch failed: ...。这是在git 2.17.1。也许当根本无法修补某些文件时,git会回滚吗?
nh2

1
我遇到了与@ nh2相同的问题,您是否找到问题了?
埃里达尼斯

12

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


5

TortoiseGit具有可以打开补丁文件的合并功能。

有它的照片在这里


实际上,合并选项可能就是我要寻找的。
Kenoyer130 2013年

真?我已经很长时间没有使用过乌龟了,但是链接页面上的文字是“ TortoiseMerge可以直接打开Git补丁文件,您可以对其进行查看并修补到工作副本。”,所以看起来应该如此!
2013年

它确实会打开补丁文件...但是,有时补丁文件格式会破坏tortoisegitmerge。我从未成功使用diff -u,而是diff -c输出。
thistleknot 2014年

您也可以右键单击工作树文件夹上的补丁,然后选择“应用补丁序列”(对于0001-xxx.patch,... 0002-xxy.patch之类的补丁)或“应用单个补丁文件”。
MrTux

2

我的方法是:

  • 在文件相同的地方创建一个“集成”分支
  • 将补丁应用到此Integration-Branch
  • 将其合并或重新设置为主版本(不知道重新设置在这里是否有用,因为我不知道应用更多补丁时会发生什么)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.