最合适的答案是
git show-branch
要获得更多的控制,你可以使用git log
且带上git rev-list
:
git log --left-right --graph --cherry-pick \
--oneline branchname...remote/branchname
这是我首选的方法,它会产生类似于以下内容:
> | fff6bda remote fix
< | c8903ee local fix
< | 724373c Merge branch 'bla' into bla
|\ \
| < | 2faf547 details
| < | abbdc47 ....
|/ /
< | befc181 some tagged commit
添加 --decorate 参数,你将得到类似于 gitk、git-gui 和 gitweb 的东西:
> | fff6bda remote fix
< | c8903ee local fix
< | 724373c (tag_4) Merge branch 'bla' into bla
|\ \
| < | 2faf547 details
| < | abbdc47 ....
|/ /
< | befc181 (tag_3) some tagged commit
专业提示1:使用'git config alias.lr log --long-option1 --long-option2
'方便使用
专业提示2:使用'git config color.ui auto
'可立即缓解视觉疲劳
如果您想要获取所有本地分支上的所有本地头部(对应于所有本地分支),与所有远程提交(在相同的分支上)进行比较:
git log --decorate --pretty=oneline --all --not --glob=refs/remotes --no-walk
去掉“no-walk”参数以获取所有单独的修订版本。在这种情况下,我更喜欢使用之前展示的开关(--graph --left-right)。
合并
如果要清晰地查看合并,请包括--boundary参数。
各种高级查询:
过滤结果
Git的log
和rev-list
支持一整套巧妙的过滤能力,请参阅手册。
--after '2001-01-01'
--until 'last week'
--author 'martin'
-E -i --grep='fixes
-S 'new_debug_function'
还有许多其他东西。这将为您提供足够的杠杆作用,以几乎不费力地获取所需信息
本地仓库中隐藏了什么?
存储在隐藏处但不在远程分支上的内容(请注意,无法引用远程分支上的隐藏,因为隐藏驻留在reflog中,而reflog始终反映本地历史[1]):
git log $(git rev-list -g stash) --not --glob=refs/remotes
所有(其他)无法访问的提交...
注意事项:
脚本编写
为了脚本编写目的,可以用git rev-list
替换git log
,这样只会得到哈希值(还有更多的脚本可靠性)。
[1] 另请参见我之前关于如何在仓库之间转移存储的答案: