使用文件名时显示带有 "git log --graph --oneline --decorate" 的分支名称

Show branch names with "git log --graph --oneline --decorate" when it takes a filename

背景

我想做什么

为了确认所有必要的更改都已成功合并到开发分支,我尝试像这样显示每个文件的合并图:

git log --graph --all --oneline --decorate=full develop -- ./path/to/a/file

并且如果有一个文件像这样分叉而不合并,我想请文件的所有者合并或删除包含该文件的分支。

* 4151fa9 Commit Message 4
| * 8dc5658 Commit Message 3
* | d579006 Commit Message 2
|/  
* 4df043a Commit Message 1

问题

我想知道fork了没有合并的分支的名称(上面的8dc5658),但是git log --graph --oneline --decorate如果以文件名作为分支名称,则不会显示分支名称参数。

我想得到的git log --graph --all --oneline --decorate=full develop -- ./path/to/a/file结果是这样的:

* 4151fa9 (HEAD -> develop) Commit Message 4
| * 8dc5658 (branch-abandoned) Commit Message 3
* | d579006 Commit Message 2
|/  
* 4df043a Commit Message 1

问题

git log --graph --oneline --decorate 以文件名作为参数时,如何在结果中显示分支名称?

请注意,您可以使用 git branch --contains COMMIT 显示提交的原始分支,但很难从提交图中识别要传递给 git branch --contains 的提交(4151fa98dc5658 在上面)对于存储库中的每个文件。

要确认所有必要的更改已成功合并到开发分支,您可以使用双点语法,例如。

git log master..experiment

如果您获得了一份提交列表,这意味着您在实验分支中有尚未合并到您的 master 分支中的提交,如果您没有在输出中获取任何提交意味着 master 分支具有 experiment 具有的所有提交。 有关详细信息,请参阅 https://git-scm.com/book/en/v2/Git-Tools-Revision-Selection 双点 部分。

尝试添加 --simplify-by-decoration :

# note : if you use '--all', you don't need to add 'develop'
git log --graph --all --oneline --simplify-by-decoration -- path/to/a/file

您将获得:

  • 所有标记有分支或标签(或任何 ref 实际上)的提交
  • 以及所有以某种方式修改的提交path/to/a/file

如果您不想看到图表中绘制的所有可能引用,您可以使用 --decorate-refs :

# will only show local branches :
git log ... --decorate-refs=refs/heads

# will only show 'origin/master' and local tags :
git log ... --decorate-refs=refs/remotes/origin/master --decorate-refs=refs/tags