使用文件名时显示带有 "git log --graph --oneline --decorate" 的分支名称
Show branch names with "git log --graph --oneline --decorate" when it takes a filename
背景
- 我们的团队使用 GitLab 上的 git 存储库来存储产品的源文件。
- 我们正在使用类似 git 流的分支模型来提交和合并对存储库的更改。
- 无意中发现有些功能分支没有合并。此外,还有一些功能分支应该删除,例如:
- 合并到develop分支成功且尚未删除的分支
- 放弃的分支(因为无法合并成功)
- 我想区分应该合并的分支和应该删除的分支。
我想做什么
为了确认所有必要的更改都已成功合并到开发分支,我尝试像这样显示每个文件的合并图:
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
的提交(4151fa9
和 8dc5658
在上面)对于存储库中的每个文件。
要确认所有必要的更改已成功合并到开发分支,您可以使用双点语法,例如。
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
背景
- 我们的团队使用 GitLab 上的 git 存储库来存储产品的源文件。
- 我们正在使用类似 git 流的分支模型来提交和合并对存储库的更改。
- 无意中发现有些功能分支没有合并。此外,还有一些功能分支应该删除,例如:
- 合并到develop分支成功且尚未删除的分支
- 放弃的分支(因为无法合并成功)
- 我想区分应该合并的分支和应该删除的分支。
我想做什么
为了确认所有必要的更改都已成功合并到开发分支,我尝试像这样显示每个文件的合并图:
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
的提交(4151fa9
和 8dc5658
在上面)对于存储库中的每个文件。
要确认所有必要的更改已成功合并到开发分支,您可以使用双点语法,例如。
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