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


128

假设我my_experiment从创建了一个新分支, master并对进行了几次提交my_experiment。如果执行git logwhen时my_experiment,我会看到对该分支所做的提交,而且还会看到创建mastermy_experiments分支之前所做的提交。

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

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

Answers:


139

您可以使用范围来做到这一点。

git log master..

如果您已签出my_experiment分支机构。这将比较master到的位置HEAD(位于的尖端my_experiment)。


3
Ok讲得太早了。对于我的简单示例,它就是这样做的。但是现在我正在查看别人的真实回购,因此我发现为了正确使用此命令,我需要知道当前分支是从哪个分支创建的。也许我应该可以从gitk告诉我,但这对我来说并不明显。有什么想法吗?
Marplesoft 2013年

@Marplesoft弄清楚这一点可能很复杂。看到这个问题
Alex

您能否简要解释一下它是如何工作的?这是什么git log master..告诉Git的?
tonix

2
@tonix按照答案中的链接获取有关范围master..部分()工作原理的更多信息。
Alex

7

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

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

如果要包括第一次提交的父级,请添加^--first-parentgit log --oneline `git merge-base my_experiment master`^..my_experiment --first-parent
Eric Lavoie

7

注意:如果将日志限制为最后n次提交(例如,最后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

提交e3fa568通过 JUNIOÇ滨野(gitster

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

此错误键入的命令行仅忽略了“ master”,并最终显示了当前的两次提交HEAD

$ git log -2master

因为我们2masteratoi()不确保将整个字符串解析为整数的情况下将“ ”输入到。

请改用strtol_i()辅助功能。



1

我认为您可以选择一种方法git log --online --decorate。这可以让您知道已检查的提交,以及故事行中每个分支的最高提交。这样,您就可以很好地了解存储库的结构以及与特定分支相关联的提交。我认为阅读这篇文章可能会有所帮助。


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
  • 然后,我们通过fianlly去除在先一切收拾输出[$BRANCH_NAME]sed -E "s/^[^\[]*?\[/[/"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.