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

时间:2013-06-07 00:05:19

标签: git git-log

假设我从my_experiment创建了一个新分支master,并对my_experiment进行了多次提交。如果我在git log上执行my_experiment,我会看到对此分支的提交,以及在创建master分支之前对my_experiments进行的提交。

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

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

6 个答案:

答案 0 :(得分:105)

您可以使用range来执行此操作。

git log master..

如果您已签出my_experiment分行。这会将master的位置与HEADmy_experiment的小费)进行比较。

答案 1 :(得分:6)

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

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

答案 2 :(得分: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)

修订版:解析&#34; git log -<count>&#34;更仔细

  

这个错误的命令行只是忽略了&#34; master&#34;并最终显示当前HEAD的两个提交:

$ git log -2master
  

因为我们提供了#34; 2master&#34;到atoi()而不确保将整个字符串解析为整数。

     

改为使用strtol_i()辅助函数。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

您只能使用git log --oneline

答案 5 :(得分:0)

我知道这已经很晚了……但是这里是一个(不是那么简单)的单人间,可以得到您想要的东西:

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/^[^\[]*?\[/[/"之前的所有内容来清理输出。