如何删除应用的git补丁?

col*_*ldy 37 git github

我有一个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
Run Code Online (Sandbox Code Playgroud)

如果我必须删除补丁并应用新补丁,目前我克隆实时内容并重新应用所有测试补丁并再次推送.这个过程有点麻烦,有时也会导致错误我也会错过一两个补丁.

我想知道是否有办法删除补丁并应用新补丁

另外,如果我们每次都提交补丁然后我可以使用,那么添加一种方法就是:

git revert <<commit id>>
Run Code Online (Sandbox Code Playgroud)

以上对我来说并不适用.

ash*_*ash 70

TL; DR

您可以使用以下命令恢复修补程序:

$ git apply -R <patch>
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式之一生成修补程序:

这将从差异生成补丁

$ git diff --patch > 0001-some-modifications.patch
Run Code Online (Sandbox Code Playgroud)

如果要为HEAD提交生成补丁:

$ git show --patch HEAD^ > 0001-some-modifications.patch
Run Code Online (Sandbox Code Playgroud)

您可以从HEAD 生成前3次提交的补丁:

$ git show --patch HEAD~3 > 0001-some-modifications.patch
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式应用补丁:

$ git apply -- 0001-some-modifications.patch
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令恢复修补程序:

$ git apply -R <patch>
Run Code Online (Sandbox Code Playgroud)

当你生成一个补丁时,它只是一个带有元数据的差异; 文件,行号添加/删除; 以下内容:

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
Run Code Online (Sandbox Code Playgroud)

因此,当您使用时,您git apply实际上是根据树应用编辑.

当你运行git apply -Rgit时,只需执行与补丁相反的操作.

  • 使用“HEAD~3”为我从单个提交创建了一个补丁。 (2认同)