【问题标题】:How do I apply rejected hunks after fixing them?修复后如何应用被拒绝的帅哥?
【发布时间】:2013-07-26 15:05:12
【问题描述】:

我正在尝试使用git apply 将补丁应用到文件。整体补丁失败,所以我使用了git apply --reject

检查生成的.rej 文件告诉我出了什么问题,现在我在.rej 文件中修复了问题。

但尝试应用 .rej 文件失败并显示消息

致命:第 2 行没有标题的补丁片段:...

有没有办法在解决问题后重新应用.rej 文件? 还是必须修改原补丁重新运行git apply

在这种情况下,这会有点麻烦,因为原始补丁包含数十个文件的补丁,我不想git checkout 应用的修改以重新git apply 整个修复的补丁文件。

【问题讨论】:

    标签: git conflict patch git-apply


    【解决方案1】:

    没有办法避免手动修改有.rej 文件的文件。你说你确实解决了这个问题。处理完所有.rej 问题后,您就可以使用git commitgit apply --reject 仍然可以节省一点时间,因为 git apply --reject 会在可能的地方修改文件。

    【讨论】:

      【解决方案2】:

      为了澄清what @julian-squires said,问题是.rej 文件在diff a/thefile...@@ -line/columns... 之间缺少一些小东西。

      原始.rej 文件

      diff a/the/original/file.cs b/the/original/file.cs    (rejected hunks)
      @@ -27,9 +27,9 @@ whatever was on that line
      

      您需要从 diff 行复制 a/b 文件名,并使用下面的更改指示符添加它们,例如:

      更新的.rej 文件

      diff a/the/original/file.cs b/the/original/file.cs    (rejected hunks)
      --- a/the/original/file.cs
      +++ b/the/original/file.cs
      @@ -27,9 +27,9 @@ whatever was on that line
      

      然后您可以像常规补丁一样应用.rej 文件。

      【讨论】:

      • 感谢您的解释。我会检查你的答案,因为它是简单的英语而不是简单的 Bash...
      【解决方案3】:

      我最近在使用git am --reject 应用一堆补丁时遇到了这个问题。我接近它的方法是将.rej文件头按摩成patch(1)可以识别的东西,用

      sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/'
      

      并使用 emacs 修改它们(其 diff-mode 将在您修改补丁时更新大块中的行数)并使用 patch 应用它们。

      我的工作流程最终看起来像这样:

      $ (for i in $(find . -name \*.rej); do
           sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/' -i $i &&
           emacsclient $i &&
           patch -p0 < $i;
         done) && git add -u && git clean -xdf && git am --continue
      

      在 emacs 中为重复出现的情况设置合适的宏。不是最优雅的方法,但它确实有效。

      【讨论】:

        猜你喜欢
        • 2016-06-15
        • 2019-09-18
        • 2019-03-15
        • 1970-01-01
        • 2015-04-25
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 2017-03-18
        相关资源
        最近更新 更多