打补丁时有什么办法解决冲突吗?

问题描述 投票:0回答:6

我在Windows上。

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

很多时候我想修复存储库 A 中的问题,生成补丁,然后将其应用到存储库 B。除非存在冲突,否则这工作正常。

变基时,我只需右键单击该文件夹并使用 tortioseGit 并选择解析选项。这会弹出一个很好的图形用户界面来让我解决冲突。

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

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

git format-patch master --stdout > c:\\patch\\file.patch
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch
git git-am git-apply
6个回答
372
投票

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

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

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

git am -3 < changes.patch
如果存在冲突,

-3

将进行三向合并。此时,如果您想转到 GUI 或只是使用 vim 手动合并文件,则可以执行 
git mergetool
(标准 
<<<<<<
||||||
>>>>>>
 冲突解决)。


20
投票
只需使用

git apply -3 <patch_name>
它将帮助您解决冲突


16
投票
如果您在应用补丁、变基或合并时经常遇到相同的冲突集,那么您可以使用 git rerere (重用记录的解决方案)功能。这使您可以根据过去解决冲突的方式来预先定义应如何解决冲突。请参阅

http://git-scm.com/blog/2010/03/08/rerere.html 了解其工作原理的详细信息。


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

有一张它的图片

这里


4
投票
我的做法是:

    创建文件相同的“集成”分支
  • 将补丁应用到此集成分支
  • 将其合并或变基为master(不知道变基在这里是否有用,因为我不知道应用进一步的补丁时会发生什么)

0
投票
对于所有无法通过三向合并应用补丁的人,我在此链接下找到了一个适合我的好解决方案:

git.vger.kernel.narkive.com

我根据答案执行了以下步骤:

    运行 git-am 获取失败补丁的编号
  1. 手动应用补丁,但在 git-apply 中打开 verbose 并拒绝

  2. git-apply --verbose --reject changes.patch
     然后冲突的文件将被保存为 
    <filename>.<extension>.rej
    
    
  3. 手动解决冲突
请检查链接以获取原始的、更详细的答案。

© www.soinside.com 2019 - 2024. All rights reserved.