Git 日志排除预告片的樱桃选择消息



假设你有这个提交日志:

commit fj9823jf982j3f9j8ydf89j
Author: Bob <bob@example.com>
Date: Today
subject
message
Signed-off-by: Bob <bob@example.com>
Acked-by: Alice <alice@example.com>
commit 978uwf98jwef89jewf98jf98
Author: Alice <alice@example.com>
Date: Today
subject
message
Signed-off-by: Alice <alice@example.com>
Acked-by: Bob <bob@example.com>
(cherry picked from commit 7823487234u82398rua)

如果我只想展示预告片,我通常会使用类似于git log --format="%(trailers)"的东西,在这种情况下会给我:

Signed-off-by: Bob <bob@example.com>
Acked-by: Alice <alice@example.com>
(cherry picked from commit 7823487234u82398rua)

因此,由于樱桃采摘消息,只能从第一次提交中读取预告片,而不是从第二次提交中读取预告片。

实际上,这意味着,如果提交消息中存在樱桃选择消息,则无法读取其他尾部。

有没有办法让 git 在解析预告片时忽略樱桃选择消息?

如果你有这个提交消息,这是正确的:

commit fj9823jf982j3f9j8ydf89j
Author: Bob <bob@example.com>
Date: Today
subject
message
Signed-off-by: Bob <bob@example.com>
Acked-by: Alice <alice@example.com>
(cherry picked from commit 7823487234u82398rua)

那么这将不给出任何输出:

cat b.txt | git interpret-trailers --only-trailers

也不会(假设HEAD在此提交中):

git log -1 --format='%s%n%n%b' | git interpret-trailers --only-trailers

所以这就是所有具有该承诺的提交的故事的结束 从拖车部分之后的樱桃采摘线。

但请注意,修订版 967dfd4d568c(音序器:使用预告片的预告片 布局,2016-11-02)[1] 教导git cherry-pick -x尊重 拖车部分(如果存在):

使序列器使用 trailer.c 的预告片布局定义,而不是 自行分析页脚。这使得 "commit -s"、"cherry-pick -x", 和"格式补丁 --签核"与预告片一致,允许 拖车块中的非拖车线和多线拖车 某些条件,因此抑制这些条件中的额外换行符 例。

这意味着现在(我在git version 2.39.2)如果你有这个提交:

commit fj9823jf982j3f9j8ydf89j
Author: Bob <bob@example.com>
Date: Today
subject
message
Signed-off-by: Bob <bob@example.com>
Acked-by: Alice <alice@example.com>

然后git cherry-pick -x会给你一个提交,看起来像:

commit fj9823jf982j3f9j8ydf89j
Author: Bob <bob@example.com>
Date: Today
subject
message
Signed-off-by: Bob <bob@example.com>
Acked-by: Alice <alice@example.com>
(cherry picked from commit 78ddce1507732a604913542989c856f15a8d6d88)

并带有git interpret-trailers

$ git log -1 --format='%s%n%n%b' | git interpret-trailers --only-trailers
Signed-off-by: Bob <bob@example.com>
Acked-by: Alice <alice@example.com>

(省略从中挑选的行)

--format=[…]

$ git show --format='%(trailers)' @
Signed-off-by: Bob <bob@example.com>
Acked-by: Alice <alice@example.com>
(cherry picked from commit 78ddce1507732a604913542989c856f15a8d6d88)

根据测试套件的行为[2]

  • git-cherry-pick -x将在-x行之前添加一个空行,如果 没有预告片部分("找不到符合页脚时,Cherry-pick -x 插入空行")
  • git cherry-pick -x -s将添加樱桃采摘行和 在现有拖车部分内按该顺序签名的行 ("樱桃采摘 -x -s 在最后一次抽泣不匹配时添加抽泣 提交者")
  • "樱桃采摘-X款待"(樱桃采摘自..." 行作为页脚的一部分">

笔记

  1. 合并于:8b0db484e11a (合并分支) "jt/use-trailer-api-in-command", 2016-12-19)
  2. 全部在标签v2.40.0

最新更新