如何获得只有一个分支的提交历史?

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

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

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

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

 git log master.. 

如果你已经检出你的my_experiment分支。 这将比较master在哪里头( my_experiment尖端)。

git merge-base命令可以用来find一个共同的祖先。 因此,如果my_experiment尚未合并到master中,而my_experiment是从master创build的,则可以:

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

注意:如果你将这个日志限制在最后n个提交(最后3个提交例如git log -3),请确保在'n'和你的分支之间放置一个空格:

 git log -3 master.. 

在Git 2.1之前(2014年8月),这个错误: git log -3master..实际上会显示当前分支的最后3个提交(这里是my_experiment ),忽略master限制(意思是如果my_experiment只包含一个提交,被列出,其中2人来自master

见Junio C gitstergitster )的 提交e3fa568 :

修改:更仔细地parsing“ git log -<count>

这个错误的命令行简单地忽略了“ master ”,并最终显示来自当前HEAD两个提交:

 $ git log -2master 

因为我们将“ 2master ”提供给atoi()而没有确保将整个stringparsing为整数。

改用strtol_i()辅助函数。

我认为你的目的是git log --oneline --decorate 。 这可以让你知道检查的提交,以及你在故事线上的每个分支的最高提交。 通过这样做,您可以对repo的结构和与特定分支关联的提交有一个很好的看法。 我想读这可能会有所帮助。