繁体   English   中英

如何获取(已删除)分支的 git log 显示名称

[英]how to get git log display name of (deleted) branches

我喜欢看我的 git 日志的方式是

git log --graph --oneline --all --decorate

在我发现其输出有用的其他内容中,还有分支名称。 但是,如果我删除一个分支,则上面不再显示它们。 我的意思是看到一堆东西,比如:

* 87c3294 (QueueExample) blah blah

比一堆更有表现力(尤其是当列表变长时)

* 87c3294 blah blah

这个问题的答案,特别是这个评论似乎暗示分支名称仍然是“某处”。

如何将它们打印在git log的输出中或至少以其他方式打印?

或者,我怎样才能从 git branch 的输出中删除分支,同时为了git log目的仍然保留它们?

在 Git 中,分支只是指向一个提交的指针,随着新提交添加到该分支上而移动。 换句话说,一旦指针移动,之前的提交在那个分支上就没有内存了。 起初,这对我来说是一个很难理解的概念。 也许是这个名字:“分支”让我想到了由边连接的多个节点,但在 Git 中,分支实际上只是一个指向节点的移动指针。

git log尽职尽责地注释带有指向它们的任何分支的提交。 例如,我创建了一个 repo,在 master 分支上提交了“one”、“two”和“three”,在分支 feature 上提交了“uno”、“dos”和“tres”,然后将功能合并回 master。 这是在我删除分支之前git log告诉我的内容:

*   9eb6e93 (HEAD, master) Merge branch 'feature'
|\
| * 523e2ac (feature) tres
| * 6d3cc0f dos
| * 1bc0b2e uno
* | d39734b three
* | 779d37b two
* | facbcbf one
|/
* 58848f4 Initial commit.

很容易被愚弄,认为“(功能)”注释以某种方式指的是右侧的那个分支,但事实并非如此:它只是指提交523e2ac

请注意,默认情况下,当 Git 创建合并提交(在我们的示例中为9eb6e93 )时,它会自动添加一条注释,说明它正在合并分支“功能”,因此有一些记录表明那里曾经有一个分支,但这只是一个评论,仅此而已。

当我删除分支“功能”时,除了提交523e2ac不再标记为“(功能)”之外,没有任何变化:

*   9eb6e93 (HEAD, master) Merge branch 'feature'
|\
| * 523e2ac tres
| * 6d3cc0f dos
| * 1bc0b2e uno
* | d39734b three
* | 779d37b two
* | facbcbf one
|/
* 58848f4 Initial commit.

所以,要回答你的问题,不,一旦你删除了一个分支,你就不能让git log用该分支名称注释提交(因为它不再存在)。 但是,您有一些选择:

  • 不要删除分支。 留下分支并没有什么坏处,只是当你输入git branch时它会弄乱你的屏幕。 此外,您可能希望重新使用分支名称,如果您不删除分支,这可能会在以后导致问题。

  • 在删除分支之前标记提交。 标签实际上是一个不动的分支。 您甚至可以使标签名称与分支名称相同。

  • 对合并提交的自动注释感到满意。 如前所述,当 Git 进行合并时,默认情况下,它会在提交注释中引用要合并的分支的名称,从而创建该分支存在的记录。 对我来说,这是最干净的解决方案,基于 Git 中分支的工作方式。 由于分支并不真正指一系列提交,因此分支存在实际上只是历史后果。

分支历史记录可能停留的另一个地方是您的 reflog,它只记录您切换到/从哪些分支。 它主要用于灾难恢复(哎呀,我不是要删除该分支!),并且对于您正在谈论的那种分支历史记录并不是很有用。

使用git log --merges列出合并提交。 已删除(但已合并)的分支的名称将与其他合并分支的名称一起显示

该评论正在谈论合并提交消息,例如Merge QueueExample into master 当您删除一个分支时,该分支就消失了。 如果您想使用--decorate维护日志的主题视图,请尝试使用标签(或不要删除分支)。

如果您删除本地存储库中的一个分支,它仍然存在于该存储库的任何其他克隆中。 如果您将该删除推送到其他存储库,则分支本身(只是一个方便命名的指向特定提交的指针)可能不复存在。 然而,它指向的提交仍然会存在一段时间,即使绝对没有任何指向它。 如果它已被合并到其他分支中,因此该提交构成了某个其他分支的祖先的一部分,那么只要它仍然可以从现有分支访问,它就会保留下来。 然而,追踪它有点棘手。 早期,它会在你的 HEAD reflog 中存在一段时间,但最终它可能会从那里消失。

如果您希望它们始终出现在git log输出中,则不要删除它们。 或者,将分支指针替换为标记,以指向删除分支之前的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM