159

假设我my_experiment从 . 如果我执行when on ,我会看到对该分支所做的提交,以及在创建分支之前所做的提交。mastermy_experimentgit logmy_experimentmastermy_experiments

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

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

4

6 回答 6

189

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

git log master..

如果你检查了你的my_experiment分支。这将比较在哪里masterHEAD的尖端my_experiment)。

于 2013-06-07T00:06:31.497 回答
12

注意:如果您将该日志限制为最后 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

请参阅Junio C Hamano ( )提交 e3fa568gitster

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

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

$ git log -2master

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

请改用strtol_i()辅助函数。

于 2014-08-02T18:37:02.450 回答
8

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

git log --oneline `git merge-base my_experiment master`..my_experiment
于 2013-06-07T00:55:42.450 回答
3

我认为适合您的选择是git log --oneline --decorate. 这可以让您知道已检查的提交,以及您在故事情节中拥有的每个分支的顶部提交。通过这样做,您可以很好地了解 repo 的结构以及与特定分支关联的提交。我认为阅读本文可能会有所帮助。

于 2017-03-13T13:42:26.977 回答
2

你只能使用git log --oneline

于 2019-03-28T11:08:04.303 回答
0

我知道这个已经很晚了......但是这里有一个(不是那么简单)oneliner来获得你想要的东西:

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/^[^\[]*?\[/[/"
于 2019-07-29T19:47:01.587 回答