Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 修复后如何应用被拒绝的帅哥?_Git_Conflict_Patch_Git Apply - Fatal编程技术网

Git 修复后如何应用被拒绝的帅哥?

Git 修复后如何应用被拒绝的帅哥?,git,conflict,patch,git-apply,Git,Conflict,Patch,Git Apply,我正在尝试使用git apply将修补程序应用于文件。整个补丁失败了,所以我使用了git apply--reject 通过检查生成的.rej文件,我发现了问题所在,现在我修复了.rej文件中的问题 但尝试应用.rej文件失败,并显示消息 致命:第2行没有标题的修补程序片段: 在修复了.rej文件中的问题后,是否有方法重新应用该文件? 或者我必须修改原始补丁并重新运行git apply 在这种情况下,这将有点麻烦,因为原始修补程序包含几十个文件的修补程序,我不想git签出所应用的修改,以便重新gi

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

通过检查生成的
.rej
文件,我发现了问题所在,现在我修复了
.rej
文件中的问题

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

致命:第2行没有标题的修补程序片段:

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


在这种情况下,这将有点麻烦,因为原始修补程序包含几十个文件的修补程序,我不想
git签出所应用的修改,以便重新
git应用整个固定修补程序文件。

在有
.rej
文件你说你已经修好了。一旦所有的
.rej
问题都解决了,您就可以进行
git提交了
git apply--reject
仍然节省了一点时间,
git apply--reject
将尽可能修改文件。

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

sed -e 's/^diff a\/\(.*\) b\/\(.*\)[[:space:]].*rejected.*$/--- \1\n+++ \2/'
并使用emacs修改它们(其
diff模式
将在修改补丁时更新大块中的行数),并使用
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
$(对于$中的i(find.-name\*.rej);do
sed-e的/^diff a\/\(.*)b\/\(.*)[[:空格:].*已拒绝。*$/--\1\n++++\2/'-i$i&&
EmacClient$i&&
贴片-p0<$i;
完成)和&git add-u和&git clean-xdf和&git am——继续
在emacs中为重复出现的情况设置合适的宏。这不是最优雅的方法,但它确实起了作用。

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

原始
.rej
文件

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

更新了
.rej
文件


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

谢谢您的解释。我会检查你的答案,因为它是简单的英语而不是简单的Bash。。。
diff a/the/original/file.cs b/the/original/file.cs    (rejected hunks)
@@ -27,9 +27,9 @@ whatever was on that line
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