Git 分支命名:'(单引号)在分支名称中是什么意思?

Git branch naming: what does ' (single quote) mean in branch name?

git-rebase docs 中,他们经常在分支名称中使用单引号 (')。

对此命名约定的唯一评论(据我所知)是:

in which A' and A introduce the same set of changes, but have different committer information

任何人都可以添加更多信息:

这些不是 分支 名称。这些是表示提交哈希 ID 的方法。

提交哈希 ID 又大又丑,对人类来说很难:例如,2e36527f23b7f6ae15e6f21ac3b08bf3fed6ee48 是否与 2e36527f23b7f6ea15e6f21ac3b08bf3fed6ee48 ?但是提交哈希 ID 是 Git 实际上 names 提交的方式。分支名称仅包含 one 提交哈希 ID——分支中 last 提交的哈希 ID。每个提交依次持有一个哈希 ID:前一个 提交的哈希 ID。1 这就是 Git 找到所有提交的方式:通过从末端开始,向后工作。

当您使用 git rebase 时,Git 必须 复制 一些提交,就像使用 git cherry-pick 一样。 (许多 rebase 操作确实使用 git cherry-pick 但有些更奇特或不同。)如果我们有一些带有一些丑陋的哈希 ID 的提交,并且我们将它复制到一个新的和改进的提交中,新的提交将 肯定有一个新的和不同的哈希ID,因为每个提交都有一个唯一哈希ID。2 因此,为了表明提交 A'A 的副本,rebase 文档使用了该单引号。它实际上是 prime symbol from mathematics.

的表示

Are there any other use cases for the ' naming convention?

很多,但不在Git;请参阅链接的维基百科文章。

What does "different committer information" mean?

每个提交都附加了两块 person-and-date/time 信息。 Git 称他们为 authorcommitter。通常这些是相同的,但如果我复制 你的 提交,我的副本将以你为作者,而我为提交者。如果我复制自己的提交,我的副本将保留我作为作者和提交者的身份,但副本将有一个新的提交者日期和时间戳。


1一些提交,我们称之为合并提交,包含两个或更多先前提交的哈希 ID。每个存储库至少有一个提交是 very first 提交并且也有 no 以前的提交哈希 ID;我们称之为 root commit。可以在存储库中放置多个根提交,但这有点棘手,因此并不常见。

2从技术上讲,哈希 ID 只需要在可能会遇到的提交中是唯一的。如果两个提交永远不会相遇,它们可以共享一个哈希 ID,作为一种分身。但实际上这永远不会发生。