【问题标题】:When applying a patch is there any way to resolve conflicts?应用补丁时有什么方法可以解决冲突吗?
【发布时间】:2013-04-17 21:49:42
【问题描述】:

我在窗户上。

由于各种原因,我们有多个不同 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

【问题讨论】:

  • 当所有修补选项都失败时,我通常会手动执行...
  • 如果合并失败,那是因为程序无法弄清楚如何明确地进行合并。你应该得到一个包含 >>> 集的文件,你必须进去手动解决它们。
  • 是的,当您谈论 100 个 rej 帅哥时,手工操作是真正的皮塔饼。
  • 那是您想要使用git mergetool 并与您选择的 gui 进行 3 路合并的时候(我偏爱 Windows 上的 kdiff)...

标签: git git-am git-apply


【解决方案1】:

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

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

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

git am -3 < changes.patch

如果有冲突,-3 将进行三路合并。此时,如果您想转至 gui 或仅使用 vim 手动合并文件(标准的 &lt;&lt;&lt;&lt;&lt;&lt;||||||&gt;&gt;&gt;&gt;&gt;&gt; 冲突解决),您可以执行 git mergetool

【讨论】:

  • --ignore-whitespace --ignore-space-change 添加到git am 也可能很有用。我有一些琐碎的合并,没有它就无法完成。
  • git apply -3 changes.patch 似乎也适合我
  • 即使补丁没有完全应用,我仍然从git mergetool 得到“没有文件需要合并”。相反,我必须找到原始补丁使用的基本提交,在此之上应用(幸运的是我的仓库有这个),然后重新设置。
  • 我遇到了和@jozxyqk 一样的问题。 git am -3git apply -3 实际上都不会将冲突标记放入我的文件中,即使我收到类似 Applied patch to 'configure.ac' with conflicts.error: patch failed: ... 的消息。这是git 2.17.1。或许当有些文件根本无法打补丁的时候,git会回滚?
  • 我遇到了和@nh2一样的问题,你有没有发现问题?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    有一张它的照片here

    【讨论】:

    • 其实合并选项可能就是我要找的。​​span>
    • 真的吗?好久没用tortoise了,但是链接页面有文字“TortoiseMerge可以直接打开Git补丁文件,你review一下,patch到工作副本。”,看来应该的!
    • 它确实会打开补丁文件...但是,有时补丁文件格式会破坏 tortoisegitmerge。我从来没有成功使用 diff -u,而是使用 diff -c 输出。
    • 您也可以在工作树文件夹上右键拖动补丁并选择“应用补丁序列”(对于像 0001-xxx.patch、... 0002-xxy.patch 之类的补丁)或“应用单个补丁”文件”。
    【解决方案4】:

    我的做法是:

    • 创建一个“集成”- 文件相同的分支
    • 将补丁应用到此集成分支
    • Merge or rebase it to master(不知道 rebase 在这里是否有用,因为我不知道应用更多补丁时会发生什么)

    【讨论】:

      猜你喜欢
      • 2022-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-23
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      相关资源
      最近更新 更多