如何只为一个分支获取提交历史记录?

问题描述 投票:96回答:5

假设我从my_experiment创建了一个新的分支master并对my_experiment做了几次提交。如果我在git log上做my_experiment,我会看到对这个分支的提交,还有在master分支创建之前对my_experiments做出的提交。

我会发现查看所有提交到my_experiments分支的历史记录非常有用,直到它触及该分支的创建 - 实际上是该分支的真实历史。否则,在查看日志时,我不清楚提交是否在my_experiments分支上。

有没有办法用Git做到这一点?

git git-log
5个回答
108
投票

你可以使用range来做到这一点。

git log master..

如果你已经检查了你的my_experiment分支。这将比较masterHEADmy_experiment的尖端)的位置。


6
投票

git merge-base命令可用于查找共同的祖先。因此,如果my_experiment尚未合并到master中并且my_experiment是从master创建的,那么您可以:

git log --oneline `git merge-base my_experiment master`..my_experiment

3
投票

注意:如果您将该日志限制为最后一次提交(例如,最后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 e3fa568Junio C Hamano (gitster)

修订:更仔细地解析“git log -<count>

这个错误的命令行只是忽略“master”并最终显示当前HEAD的两个提交:

$ git log -2master

因为我们将“2master”提供给atoi()而不确保将整个字符串解析为整数。

请改用strtol_i()辅助函数。


1
投票

我认为你的选择是git log --oneline --decorate。这可以让您知道已检查的提交以及故事线中每个分支的最高提交。通过这样做,您可以很好地了解repo的结构以及与特定分支关联的提交。我认为阅读this可能有所帮助。


0
投票

你只能使用git log --oneline


0
投票

我知道这个晚了很晚......但是这里有一个(不是那么简单)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/^[^\[]*?\[/[/"之前的所有内容来清理输出。
© www.soinside.com 2019 - 2024. All rights reserved.