如何在git日志的输出中显示分支的名称?

例如,git log, graph,我得到了一个很好的提交概述,但搞不清楚哪行是主行,哪行是分支。


当前回答

试试装饰。

git log --graph --all --decorate

它注释由标记或分支指向的提交。

其他回答

如果您碰巧使用oh-my-zsh作为您的终端,那么可以使用一堆git别名。所有这些都可以在他们的repo oh-my-zsh/plugins/git中看到。如果您不使用这个终端,那么您只需获取别名并将喜欢的别名粘贴到您自己的环境中。

接受的答案是git log——graph——all——decoration命令,该命令在oh-my-zsh中作为glgga的别名可用。

就我个人而言,我更喜欢glods的别名,翻译过来是:

git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short

你可以这样做:

git log --decorate --oneline --pretty='%h refs: %d message:%s'

注意,并非所有提交都有对分支或标记的引用。为此,您需要一个更复杂的“管道”方法。

这是一个旧的帖子,但是发布的答案实际上并没有显示每次提交的分支名称——它们只显示最近一次提交的分支名称。要列出每次提交的分支名称,使用git show-branch命令。例如:

$ git show-branch --all --more
! [Branch_Feature_1] Commit Msg: Feature_1, Commit #1
 ! [Branch_Feature_2] Commit Msg: Feature_2, Commit #2
  ! [Branch_Feature_3] Commit Msg: Feature_3, Commit #1
   * [master] Merge branch 'Branch_Feature_3' Commit Msg: Merge Master Commit #2 + Feature_3
----
   - [master] Merge branch 'Branch_Feature_3' Commit Msg: Merge Master Commit #2 + Feature_3
  +* [Branch_Feature_3] Commit Msg: Feature_3, Commit #1
   * [master^] Commit Msg: Master, Commit #2
 ++* [Branch_Feature_2] Commit Msg: Feature_2, Commit #2
 ++* [Branch_Feature_2^] Commit Msg: Feature_2, Commit #1
+++* [Branch_Feature_1] Commit Msg: Feature_1, Commit #1
+++* [Branch_Feature_1^] Master_Commit_Msg: Original file

为了明确每个工具显示的内容,我用“Branch_”前缀命名所有分支,并用“commit Msg”标记所有提交消息。

在这个例子中有四个分支,Master和Branch_Feature_1到Branch_Feature_3。Branch_Feature_1有一次提交,Branch_Feature_2有两次提交。两者都是通过快进合并进行合并的。Feature_3有一次提交,并通过非ff合并合并,因为在Feature_3分支后有一次提交到master。

“----”上面的行显示了每个分支加上master的最近提交,即每个分支的顶端。在master之前加上前缀的“*”表示它是当前活动的分支。所有其他分支的“!”前缀表明它们不是活动的分支。

“----”下面的行显示了每个分支的所有提交。“-”前缀表示合并。“+”和“*”前缀表示在“----”上面显示的哪个分支上出现了哪些提交。注意这些列是如何排列的。“*”和“+”只是表示哪些是活动分支,哪些不是。

将此与相同存储库的git日志输出进行比较:

git log --oneline --graph --all --parents
*   2d142e7 fd4f402 9eb9513 (master) Merge branch 'Branch_Feature_3' Commit Msg: Merge Master Commit #2 + Feature_3
|\
| * 9eb9513 c9bb4db (HEAD -> Branch_Feature_3) Commit Msg: Feature_3, Commit #1
* | fd4f402 c9bb4db Commit Msg: Master, Commit #2
|/
* c9bb4db a470d38 (Branch_Feature_2) Commit Msg: Feature_2, Commit #2
* a470d38 f3fde4d Commit Msg: Feature_2, Commit #1
* f3fde4d 81753a3 (Branch_Feature_1) Commit Msg: Feature_1, Commit #1
* 81753a3 Master_Commit_Msg: Original file

请注意git日志如何仅显示每个分支在当前HEAD上提交的分支名称。树符号表示哪些提交在哪些分支上,但我发现git的show-branch输出在显示关系方面要好得多。

注意,如果你更喜欢看到SHA-1值而不是简写引用,请添加——sha1-name:

! [Branch_Feature_1] Commit Msg: Feature_1, Commit #1
 ! [Branch_Feature_2] Commit Msg: Feature_2, Commit #2
  * [Branch_Feature_3] Commit Msg: Feature_3, Commit #1
   ! [master] Merge branch 'Branch_Feature_3' Commit Msg: Merge Master Commit #2 + Feature_3
----
   - [2d142e7] Merge branch 'Branch_Feature_3' Commit Msg: Merge Master Commit #2 + Feature_3
  *+ [9eb9513] Commit Msg: Feature_3, Commit #1
   + [fd4f402] Commit Msg: Master, Commit #2
 +*+ [c9bb4db] Commit Msg: Feature_2, Commit #2
 +*+ [a470d38] Commit Msg: Feature_2, Commit #1
++*+ [f3fde4d] Commit Msg: Feature_1, Commit #1

试试装饰。

git log --graph --all --decorate

它注释由标记或分支指向的提交。

我正在寻找与此类似的东西-但想知道更改了哪个分支。希望这个答案对其他人也有用。

我正在调查黑盒加密的风险,其中回购和它的分支/标签可能对当前管理员不可用,当足够多的用户离开一个项目时,keyrings目录没有基于master)

我发现下面的答案是有帮助的keyrings目录没有从master更新…

基本上添加——source就是我需要显示分支/标签的东西。添加——name-only还将显示实际更改的文件。

cd /path/to/repo-that-uses-blackbox-encryption
git log --graph --all --decorate --source --name-only keyrings

另一个有用的答案:如何显示git日志与分支名称