假设我从my_experiment
创建了一个新的分支master
并对my_experiment
做了几次提交。如果我在git log
上做my_experiment
,我会看到对这个分支的提交,还有在master
分支创建之前对my_experiments
做出的提交。
我会发现查看所有提交到my_experiments
分支的历史记录非常有用,直到它触及该分支的创建 - 实际上是该分支的真实历史。否则,在查看日志时,我不清楚提交是否在my_experiments
分支上。
有没有办法用Git做到这一点?
git merge-base
命令可用于查找共同的祖先。因此,如果my_experiment尚未合并到master中并且my_experiment是从master创建的,那么您可以:
git log --oneline `git merge-base my_experiment master`..my_experiment
注意:如果您将该日志限制为最后一次提交(例如,最后3次提交,例如git log -3),请确保在“n”和您的分支之间放置一个空格:
git log -3 master..
在Git 2。1(2014年8月)之前,这个错误:git log -3master..
实际上会显示当前分支的最后3次提交(这里是my_experiment
),忽略master
限制(意味着如果my_experiment
只包含一个提交,3仍然会被列出,2他们来自master
)
请参阅commit e3fa568的Junio C Hamano (gitster
):
git log -<count>
”这个错误的命令行只是忽略“
master
”并最终显示当前HEAD
的两个提交:
$ git log -2master
因为我们将“
2master
”提供给atoi()
而不确保将整个字符串解析为整数。请改用
strtol_i()
辅助函数。
我认为你的选择是git log --oneline --decorate
。这可以让您知道已检查的提交以及故事线中每个分支的最高提交。通过这样做,您可以很好地了解repo的结构以及与特定分支关联的提交。我认为阅读this可能有所帮助。
你只能使用git log --oneline
我知道这个晚了很晚......但是这里有一个(不是那么简单)oneliner来获得你想要的东西:
git show-branch --all 2>/dev/null | grep -E "\[$(git branch | grep -E '^\*' | awk '{ printf $2 }')" | tail -n+2 | sed -E "s/^[^\[]*?\[/[/"
git show-branch
列出具有分支名称和相对位置的提交到实际分支状态(将警告发送到/dev/null
)。grep -E "\[$BRANCH_NAME"
将支持名称保留在括号内。$BRANCH_NAME
获得实际的git branch | grep -E '^\*' | awk '{ printf $2 }'
(带有恒星的分支,没有那颗恒星的回声)。tail -n+2
开头删除冗余行。[$BRANCH_NAME]
移除sed -E "s/^[^\[]*?\[/[/"
之前的所有内容来清理输出。