git 如何获取一个分支的提交历史?

yqyhoc1h  于 2022-11-27  发布在  Git
关注(0)|答案(6)|浏览(296)

假设我从master创建了一个新的分支my_experiment,并向my_experiment进行了几次提交。如果我在my_experiment上执行git log,我会看到向该分支进行的提交,也会看到在my_experiments分支创建之前向master进行的提交。
我发现查看my_experiments分支的所有提交的历史记录非常有用,直到它命中该分支的创建--实际上是该分支的真实历史记录。否则,当我查看日志时,我不清楚提交是否在my_experiments分支上。
有没有办法用Git做到这一点?

ubof19bj

ubof19bj1#

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

git log master..

如果你已经 checkout 了你的my_experiment分支,这将比较master所在的位置和HEADmy_experiment的顶端)。

gfttwv5a

gfttwv5a2#

注意:如果你把日志限制为最后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 ( gitster )commit e3fa568

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

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

$ git log -2master

因为我们将“2master“提供给atoi(),而没有确保将整个字符串解析为整数。
请改用strtol_i()辅助函数。

kh212irz

kh212irz3#

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

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

nwlqm0z14#

我认为git log --oneline --decorate是一个适合你的选项。它让你知道你故事线中每个分支的检查提交和最高提交。通过这样做,你可以很好地了解你的repo的结构和与特定分支相关的提交。我认为阅读this可能会有所帮助。

omtl5h9j

omtl5h9j5#

只能使用git log --oneline

ttvkxqim

ttvkxqim6#

我知道现在已经很晚了......但这里有一个(不那么简单)的一行得到你正在寻找的:

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/^[^\[]*?\[/[/",从而清理输出。

相关问题