如何修复被拒绝的帅哥?

时间:2013-07-26 11:05:40

标签: git conflict patch git-apply

我正在尝试使用git apply将修补程序应用于文件。整个补丁失败了,所以我使用了git apply --reject

检查生成的.rej文件显示我出了什么问题,现在我在.rej文件中解决了问题。

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

  

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

在修复问题后,有没有办法重新应用.rej文件?  或者我是否必须修改原始补丁并且必须重新运行git apply

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

3 个答案:

答案 0 :(得分:11)

要澄清what @julian-squires said,问题是.rej文件遗漏了diff a/thefile...@@ -line/columns...之间的一些小问题。

ORIGINAL .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文件。

答案 1 :(得分: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中为重复出现的案例设置合适的宏。不是最优雅的方法,但它有效。

答案 2 :(得分:0)

无法手动修改存在.rej文件的文件。你说你确实解决了这个问题。完成所有.rej问题后,您就可以git commit了。 git apply --reject仍会节省一点时间git apply --reject将修改文件。