21

我正在尝试使用git apply. 整体补丁失败,所以我使用了git apply --reject.

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

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

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

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

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

4

3 回答 3

19

为了澄清@julian-squires 所说的,问题是文件在和.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像常规补丁一样应用这些文件。

于 2015-02-17T19:03:23.460 回答
4

我最近遇到了这个问题,同时使用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 中为重复出现的情况设置合适的宏。不是最优雅的方法,但它有效。

于 2014-11-07T21:18:20.127 回答
0

没有办法手动修改有文件的.rej文件。你说你确实解决了这个问题。一旦所有的.rej问题都得到了照顾,你就准备好了git commitgit apply --reject仍然可以节省一点时间,git apply --reject因为它可以修改文件。

于 2013-07-26T11:48:06.437 回答