Git的`format-patch`没有返回任何内容

4

我想为我的存储库中的提交创建补丁。

  • 系统:Windows 10
  • 工具:Git Windows桌面版和Git Shell git --version => git version 2.10.1.windows.1

当我尝试创建补丁时,我执行以下操作:

git format-patch master
git format-patch master -o C:\Users\MyUser\Desktop
git format-patch master --stdout > C:\Users\MyUser\Desktop\MyPatch.patch

在这三种情况下,我得不到任何东西。在前两种情况下,我指定的位置中没有保存任何文件。在第三种情况下,生成的文件为0字节。
我的存储库状态如下:
我已将所有内容推送到master分支。所以我没有本地未提交或已提交的更改。一切都在服务器上。
此外,如果我更改一个文件并有未提交的更改,它仍然无法正常工作。
我也尝试过:
git format-patch <ccommit-sha>

使用我推送的提交的SHA哈希。仍然无效。
我做错了什么?
1个回答

9
要创建补丁,您需要指定用于创建补丁的内容。如果您想使用主分支中的最后一次提交来创建补丁,请调用git format-patch -1 main
如果您需要为某个特定提交创建补丁(多个补丁),可以使用SHA-1值代替分支名称。
有关更多信息,请查看format-patch文档
值得注意的是,如果您使用的是晚于当前提交的提交的SHA-1哈希值,
这是由补丁创建方式引起的。Git的git-format-patch文档指出,补丁实际上是执行以下操作的输出。
diff -p stat

该命令创建一个提交和其父提交之间的差异。在这种情况下,父提交是一个关键点。如果您想要创建当前代码库状态(例如检出的提交)与将来某个提交之间的补丁,则不可能,因为该未来提交不是父级提交,而是子级提交。


它正在工作。谢谢。但是如何为特定提交指定SHA? - Andry
1
简单来说,将SHA-1值放在'master'的位置。此外,您可以使用-<n>开关(在我的示例中为-1)来定义补丁的“距离”。 - Kamil
为什么在同一分支中使用未来提交的哈希值无法正常工作? - Mark Jeronimus
@MarkJeronimus 你所说的“future commit”是什么意思? - Kamil
时间线树中相对于当前检出的提交在未来的提交。 - Mark Jeronimus
@MarkJeronimus,这是由补丁创建方式引起的。Git文档称,补丁在技术上是执行“diff -p stat”的输出,该命令在提交和其父提交之间创建差异。在此情况下,父提交是关键。如果你想要在当前仓库状态(例如,已检出的提交)和未来状态之间创建补丁,那是不可能的,因为未来提交不是父提交,而是子提交。来源: https://git-scm.com/docs/git-format-patch https://git-scm.com/docs/git-diff - Kamil

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