git 空提交时的格式补丁 returns 意外结果
git format-patch on empty commit returns unexpected result
找不到有关此问题的 git 文档的任何解释:
如果我创建一个带有一些虚拟差异的虚拟提交,我会得到一个正常的补丁
当我 运行
git format-patch -1 -o outgoing/ -p -k
但如果最后一次提交是空提交,由
生成
git commit --allow-empty "Some commit message"
那么格式补丁的输出将是一个空补丁。如果
第一种情况产生如下内容:
From 08cfdb2994554d834b89309ca96d9bf513e26a90 Mon Sep 17 00:00:00 2001
From: User <mail@example.com>
Date: Fri, 8 Jan 2016 12:44:57 +0000
Subject: dummy commit
diff --git a/lol.txt b/lol.txt
new file mode 100644
index 0000000..f944b38
--- /dev/null
+++ b/lol.txt
@@ -0,0 +1 @@
+:)
--
2.5.4 (Apple Git-61)
那么第二种情况不应该生成这样的东西吗?
From 2d486f25c48780e2e132047e681929fcccb7e60c Mon Sep 17 00:00:00 2001
From: User <mail@example.com>
Date: Fri Jan 8 12:43:55 2016 +0000
Subject: Some commit message
2.5.4 (Apple Git-61)
2022 年更新:使用 Git 2.35(2022 年第一季度),“git am
"(man) 学习 --empty=(stop|drop|keep)"
和 --allow-empty
选项以调整已完成的操作到一块没有补丁的 e-mail。
参见“git-am with mailbox patch fails when it contains a cover letter”。
2016年:原答案:
注意:如果空提交不是最后一次,它会起作用(如“Git patch of empty commits”中所述)
有一场关于 empty commit patch in this thread back in 2010 的辩论。
A half-good news is that format-patch
already takes --always
command line option to generate a message out of an empty commit, but because it cannot be applied with "am
", it is rather pointless.
(--always
通过to git diff-tree
)
你需要做一些测试,但默认情况下确实不包括空提交。
摘自git 邮件列表:
杰夫金说:
I'm not sure if this is a bug or not.
In the beginning, git's revision-traversal machinery generally does not show
commits which have no diff. Over the years, commands like "git log"
learned to set the "always_show_header" option to show even empty commits.
But format-patch never did.
然后 Junio C Hamano 补充道:
The patch based workflow support is geared towards helping the recipient
of the patches a lot more than the contributors, and to prevent mistakes while
applying the patches, "am" would stop when it sees such an empty e-mail as you saw
(in the later part of message I am not quoting). After all, a "format-patch" output
that does not have any patch would be indistinguishable from discussion e-mail
messages and the recipient would not want to end up with no-op commits
that record such messages.
So I think skipping no-op commit from the output was done pretty much deliberately
and it is definitely not a bug. I however do not think it is incorrect
to say that it is a lack of feature that nobody
so far found necessary or beneficial.
I would not refuse to consider adding a new option to "format-patch"
to emit such a no-op message, and add a "having no patch is OK, just record a
no-op commit" option to "am", though. But I do not see a clear benefit from
such change--it sounds more like a set of"because we could" not
"because we need to" changes to me.
thread available at http://git.661346.n2.nabble.com/git-format-patch-on-empty-commit-td7645342.html
thanks to @VonC for finding it
找不到有关此问题的 git 文档的任何解释:
如果我创建一个带有一些虚拟差异的虚拟提交,我会得到一个正常的补丁 当我 运行
git format-patch -1 -o outgoing/ -p -k
但如果最后一次提交是空提交,由
生成git commit --allow-empty "Some commit message"
那么格式补丁的输出将是一个空补丁。如果 第一种情况产生如下内容:
From 08cfdb2994554d834b89309ca96d9bf513e26a90 Mon Sep 17 00:00:00 2001
From: User <mail@example.com>
Date: Fri, 8 Jan 2016 12:44:57 +0000
Subject: dummy commit
diff --git a/lol.txt b/lol.txt
new file mode 100644
index 0000000..f944b38
--- /dev/null
+++ b/lol.txt
@@ -0,0 +1 @@
+:)
--
2.5.4 (Apple Git-61)
那么第二种情况不应该生成这样的东西吗?
From 2d486f25c48780e2e132047e681929fcccb7e60c Mon Sep 17 00:00:00 2001
From: User <mail@example.com>
Date: Fri Jan 8 12:43:55 2016 +0000
Subject: Some commit message
2.5.4 (Apple Git-61)
2022 年更新:使用 Git 2.35(2022 年第一季度),“git am
"(man) 学习 --empty=(stop|drop|keep)"
和 --allow-empty
选项以调整已完成的操作到一块没有补丁的 e-mail。
参见“git-am with mailbox patch fails when it contains a cover letter”。
2016年:原答案:
注意:如果空提交不是最后一次,它会起作用(如“Git patch of empty commits”中所述)
有一场关于 empty commit patch in this thread back in 2010 的辩论。
A half-good news is that
format-patch
already takes--always
command line option to generate a message out of an empty commit, but because it cannot be applied with "am
", it is rather pointless.
(--always
通过to git diff-tree
)
你需要做一些测试,但默认情况下确实不包括空提交。
摘自git 邮件列表:
杰夫金说:
I'm not sure if this is a bug or not.
In the beginning, git's revision-traversal machinery generally does not show
commits which have no diff. Over the years, commands like "git log"
learned to set the "always_show_header" option to show even empty commits.
But format-patch never did.
然后 Junio C Hamano 补充道:
The patch based workflow support is geared towards helping the recipient
of the patches a lot more than the contributors, and to prevent mistakes while
applying the patches, "am" would stop when it sees such an empty e-mail as you saw
(in the later part of message I am not quoting). After all, a "format-patch" output
that does not have any patch would be indistinguishable from discussion e-mail
messages and the recipient would not want to end up with no-op commits
that record such messages.
So I think skipping no-op commit from the output was done pretty much deliberately
and it is definitely not a bug. I however do not think it is incorrect
to say that it is a lack of feature that nobody
so far found necessary or beneficial.
I would not refuse to consider adding a new option to "format-patch"
to emit such a no-op message, and add a "having no patch is OK, just record a
no-op commit" option to "am", though. But I do not see a clear benefit from
such change--it sounds more like a set of"because we could" not
"because we need to" changes to me.
thread available at http://git.661346.n2.nabble.com/git-format-patch-on-empty-commit-td7645342.html thanks to @VonC for finding it