我很好奇是否有办法在命令行上显示分支层次结构?例如,如果我使用git branch
,而不是看到这样的输出:
* master
joes_work
refactoring
experiment
你会看到这样的输出:
* master
joes_work
refactoring
experiment
通过这种方式,很容易看出哪个分支是一个特定的分支。即使没有输出树结构的特定命令,是否有一个命令可以输出哪个分支来自哪个分支的信息?我可以使用perl脚本来格式化输出。
答案 0 :(得分:92)
git log --all --graph --decorate --oneline --simplify-by-decoration
* ae038ad (HEAD, branch2-1) add content to tmp1
| * f5a0029 (branch2-1-1) Add another
|/
* 3e56666 (branch1) Second wave of commits
| * 6c9af2a (branch1-2) add thing
|/
* bfcf30a (master) commit 1
答案 1 :(得分:22)
尝试
git show-branch
git show-branch --all
示例输出:
bash$ git show-branch --all
! [branchA] commitA only in branchA
* [branchB] commitB
! [branchC] commitC only in branchC
---------------------
+ [branchA] commitA only in branchA
* [branchB] commitB
+ [branchC] commitC only in branchC
*+ [branchC~1] commitB-1 also in branchC
*+ [branchC~2] commitB-2 also in branchC
+++ [branchC~3] common ancestor
+++ [branchC~4] more common ancestors
答案 2 :(得分:9)
答案 3 :(得分:5)
从git的角度来看,这不是分支机构的工作方式。如果我做了一些提交分支a
,请从中创建分支b
,在那里工作,然后在a
上做其他工作:
A -- B -- D <-- a
\
\
C <-- b
如果你以相反的方式做到这一点,这是无法区分的:
A -- B -- C <-- b
\
\
D <-- a
我能想到找出某个分支来自哪个分支的唯一方法是reflog,但这是不可靠的(超过90天的条目通常会被删除)。
答案 4 :(得分:4)
我想完成@ctcherry的答案。
当我还可以看到执行提交的用户和日期时,我很喜欢,所以这是以下要使用的行:
git log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
但是,这是一条很长的线,很难记住,因此可以使用别名。 您只需要在终端中使用它:
git config --global alias.lg "HERE GOES MY BIG LOG COMMAND LINE"
要进行总结,请在您的终端上复制并粘贴以下行:
git config --global alias.lg "log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
然后,您只需使用git lg
即可获取日志历史记录树。
答案 5 :(得分:-1)
.gitconfig
的别名如何:
[alias]
branch-tree = !cd "$(git rev-parse --git-dir)/refs/heads" && tree
您还可以根据tree
命令支持的内容提供选项,例如时间戳为-D
。