我在一个发布分支上,在那里我应用了从master(主要开发(中挑选的提交。
我想检查一些旧的提交是否已经被复制,所以我开始使用git log
和grep
来查找其中一个提交哈希。
在分支上时,我通常会将有关 master 的最新提交与以下内容进行比较:
git log --oneline -20
和
git log --oneline -20 master
但是现在我想检查一系列提交,经过一些试验和错误,我最终使用了:
git log --oneline <myhash>~..HEAD master
当 master 被签出时,它会给出预期的结果 - 从<myhash>
(含(到master的最新提交列表。
但是,如果我在不同的分支上运行,则相同的命令会产生不同的结果(实际上它似乎给出了从分支开始到最新的所有提交(:为什么?
如果要查看分支上从特定其他提交开始的所有提交,请使用以下命令:
git log --oneline start..branch
其中start
是开始提交,branch
是最终提交。Git 将显示所有可从branch
访问的提交,并排除可从start
访问的提交(相同的行为通过以下方式实现:git log ^start branch
,即"不启动"和"分支"(
当您执行start..HEAD master
时,您将获得开始和当前提交/分支之间的所有提交以及可从master
访问的所有提交。在这种情况下,您实际上指定了 3 个提交:^start
、HEAD
和master
。然后 Git 将遍历图形以给出结果:可从HEAD
(当前提交/分支(访问的所有提交,可从master
访问的所有提交,但排除可从start
访问的所有提交