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

Mar*_*oft 111 git git-log

比方说,我创建了一个新的分支my_experimentmaster并提出了一些对提交my_experiment.如果我在启动git log时执行my_experiment,我会看到对此分支的提交,但也会在创建分支master之前进行提交my_experiments.

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

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

ale*_*lex 117

您可以使用范围来执行此操作.

git log master..
Run Code Online (Sandbox Code Playgroud)

如果你已经检查了你的my_experiment分支机构.这将比较,其中master是在以HEAD(的尖端my_experiment).

  • 好的说得太早了.这是我的简单例子.但是现在我正在看别人的真实回购,而且我发现为了正确使用这个命令,我需要知道我当前分支是从哪个分支创建的.也许我应该能够从gitk告诉这一点,但这对我来说并不明显.有什么想法吗? (3认同)
  • @tonix按照答案中的链接获取有关*range*如何工作(`master..`)部分的更多信息. (2认同)

Von*_*onC 10

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

git log -3 master..
Run Code Online (Sandbox Code Playgroud)

在 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
Run Code Online (Sandbox Code Playgroud)

因为我们2masteratoi()没有确保整个字符串被解析为整数的情况下提供“ ” 。

请改用strtol_i()辅助函数。


cfo*_*ish 6

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

git log --oneline `git merge-base my_experiment master`..my_experiment
Run Code Online (Sandbox Code Playgroud)


Man*_*ana 5

您只能使用git log --oneline

  • 虽然此代码可以回答问题,但提供有关如何和/或为何解决问题的附加上下文将提高​​答案的长期价值。 (3认同)