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

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

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

有什么方法可以解决 Git 的问题吗?

331310 次浏览

您可以使用 射程来做到这一点。

git log master..

如果你检查了你的 my_experiment分支,这将比较 masterHEAD(my_experiment的末端)的位置。

git merge-base命令可用于查找共同的祖先。因此,如果我的实验还没有被合并到 master 中,并且我的实验是由 master 创建的,你可以:

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只包含一次提交,那么仍然会列出3次提交,其中2次来自 master)

提交 e3fa568 by 滨野俊男(gitster):

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

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

$ git log -2master

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

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

我认为你的选择是 git log --oneline --decorate。这样就可以知道选中的提交,以及故事情节中每个分支的顶部提交。通过这样做,您可以很好地了解回购的结构以及与特定分支相关联的提交。我认为阅读 这个可能会有帮助。

您只能使用 git log --oneline

我知道现在说这个已经很晚了... ... 但是这里有一个(不那么简单的)线条,可以让你得到你想要的:

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
  • 然后,我们最终通过删除 sed -E "s/^[^\[]*?\[/[/"[$BRANCH_NAME]之前的所有内容来清理输出。