我正在尝试使用git apply
将修补程序应用于文件。整个补丁失败了,所以我使用了git apply --reject
。
检查生成的.rej
文件显示我出了什么问题,现在我在.rej
文件中解决了问题。
但是尝试应用.rej
文件失败并显示消息
致命:第2行没有标题的补丁片段:...
在修复问题后,有没有办法重新应用.rej
文件?
或者我是否必须修改原始补丁并且必须重新运行git apply
?
在这种情况下这会有点麻烦,因为原始补丁包含几十个文件的补丁,我不想git checkout
应用修改以重新git apply
整个修复补丁文件。
答案 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
将修改文件。