我有一个git repo,我们在测试环境中应用了很多补丁。
git apply --stat --check --ignore-whitespace /home/kent/Desktop/patches/test.patch --exclude .gitignore
git am -s --ignore-whitespace /home/kent/Desktop/patches/test.patch --exclude .gitignore --exclude .gitignore
如果我必须删除补丁并应用新补丁,目前我克隆实时内容并重新应用所有测试补丁并再次推送。 这个过程有点麻烦,有时也会导致错误我也会错过一两个补丁。
我想知道是否有办法删除补丁并应用新补丁
另外,如果我们每次都提交补丁然后我可以使用:
,那么添加一种方法就是这样git revert <<commit id>>
上述内容对我来说无效。
答案 0 :(得分:55)
您可以使用以下内容恢复修补程序:
$ git apply -R <patch>
您可以通过以下方式之一生成补丁:
这将从diff
生成补丁$ git diff --patch > 0001-some-modifications.patch
如果您想仅为HEAD提交生成补丁:
$ git show --patch HEAD^ > 0001-some-modifications.patch
您可以从HEAD:
为之前的 3 提交生成补丁$ git show --patch HEAD~3 > 0001-some-modifications.patch
您可以通过以下方式应用补丁:
$ git apply -- 0001-some-modifications.patch
您可以使用以下内容恢复修补程序:
$ git apply -R <patch>
生成补丁时,它只是一个带元数据的差异;文件,行号添加/删除;以下内容:
commit 9dad147cbf16befecdef2e812c1249499bdef5ac
Author: My Name <email@example.org>
Date: Mon Dec 21 20:46:01 2015 +0000
Example commit message.
diff --git a/src/example.md b/src/example.md
new file mode 100644
index 0000000..ab73512
--- /dev/null
+++ b/src/example.md
@@ -0,0 +1,3 @@
+# Example document
+
+ Hello World
因此,当您使用git apply
时,您基本上会对树进行编辑。
然后当你运行git apply -R
git时,只需执行与补丁相反的操作。
答案 1 :(得分:1)
我在Windows上使用git,它的工作方式与Linux上有所不同。具体来说,我发现当我跑步时:
git apply -R C:\downloads\mypatch.patch
这可能在错误的目录中运行。我必须将其复制到应用补丁的本地目录中。我也有类似的错误:
error: product/build.gradle: No such file or directory
error: main/generator/generator.js: No such file or directory
这太奇怪了,因为这些文件位于我的补丁程序内部指定的目录中。我可以找到的唯一解决方法是手动修改补丁。我必须更改文件名以将./
放在目录和文件名的前面。所以我转了这个:
Index: build_scripts/product/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- build_scripts/product/build.gradle (revision 537fbcc1ebdf65652896eaaf2a315cc44a24ba6c)
+++ build_scripts/product/build.gradle (date 1594123740523)
@@ -304,7 +304,7 @@
from("$repoRootDir/src/main/nodejs/utils/") {
include "common_*.js"
}
对此:
Index: ./build_scripts/product/build.gradle
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- ./build_scripts/product/build.gradle (revision 537fbcc1ebdf65652896eaaf2a315cc44a24ba6c)
+++ ./build_scripts/product/build.gradle (date 1594123740523)
@@ -304,7 +304,7 @@
from("$repoRootDir/src/main/nodejs/utils/") {
include "common_*.js"
}
唯一的变化是在三个不同的./
字符串之前的build_scripts/product/build.gradle
。
另外,另一个不错的提示是git apply
带有一个-v
参数,该参数给出了更多的详细信息,因此您可以看到,它是在应用补丁程序之前先检查补丁程序是否安全。