Git apply不会创建新文件吗?

14

我试图通过使用diffapply来创建补丁。我的补丁包含了一个新文件,但是在apply后出现了错误。

git diff master origin/master > patch1.diff
git apply patch1.diff -v

Checking patch test3...
error: test3: No such file or directory

补丁:

diff --git a/test3 b/test3
deleted file mode 100644
index df6b0d2..0000000
--- a/test3
+++ /dev/null
@@ -1 +0,0 @@
-test3

我做错了什么或者git apply不能创建新文件?


1
你不想使用 git format-patch 有什么原因吗? - Carl Norum
是的,一个共同的兴趣。 - Viacheslav Kondratiuk
1个回答

11
您正在反向创建补丁——该补丁试图删除该文件。我认为您想要的是:
git diff origin/master master > patch1.diff

你可能会发现git format-patch很有帮助。如果你目前已经检出了master,那么只需执行以下操作:

git format-patch origin/master

该命令将产生一堆补丁文件,每个文件对应您的分支与origin/master之间的每个不同提交。然后,您可以使用git am 应用这些补丁,并保留所有额外数据,例如提交消息和作者信息。


3
如果你使用--stdout选项,将更加方便。git format-patch --stdout origin/master | pbcopy 将补丁放到我的剪贴板上(在OS X上),然后 pbpaste | git am 将会将其应用到当前仓库。 - Lily Ballard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接