假设我从主分支分支到主题分支,然后在主题分支上进行了一些提交。是否有命令告诉我主题分支源自的主分支上的提交哈希?
理想情况下,我不必知道我做了多少次提交(试图避免 HEAD^5 )。
我用谷歌搜索过,但似乎找不到答案。谢谢!
使用
git merge-base master your-branch
找到两个分支(通常是分支点)之间的最佳共同祖先。
您可以使用
git reflog show --no-abbrev <branch name>
。它将输出对分支所做的所有更改,包括其创建,例如(我从 xxx
分支创建了 master
分支):
bdbf21b087de5aa2e78a7d793e035d8bd9ec9629 xxx@{0}: branch: Created from master
请注意,这不是很可靠,因为引用日志记录可能会过期(默认为 90 天),而且似乎没有 100% 可靠的方法来做到这一点。
唯一 100% 可靠的方法是在创建分支时标记分支的开头。如果您将提交合并回您发起新分支的分支,则接受的答案将不起作用。有时会这样做,例如,如果您正在创建稳定版本分支并希望将在发布测试期间找到的修复程序合并回主版本。一件很平常的事。如果您知道您永远不会将新分支的提交合并回原始分支,那么接受的答案将起作用。
如果感兴趣的分支还没有合并,就像大家说的:
git merge-base branch1 branch2
如果您合并了分支(例如
topic
和 master
,以任何方式合并):
git merge-base topic master
sha-of-last-merge
git rev-list --parents -n 1 sha1-of-last-merge
sha-of-last-merge sha-of-parent-1 sha-of-parent-2
git merge-base sha-of-parent-1 sha-of-parent-2
topic
上的提交(即合并提交)开始您的 master
分支,那么就不走运了。需要启发法/常识/其他知识。这将向您显示第一个提交
topic
:
git rev-list topic ^master | tail -n 1
这将显示分支开始的提交,即分叉点:
git rev-parse "$(git rev-list topic ^master | tail -n 1)^"
这些也适用于自创建
master
分支以来将 topic
合并到 topic
的情况。它假设 topic
从 master
开始。
解释:
git rev-list topic ^master
列出
topic
上无法从 master
访问的所有提交。
| tail -n 1
然后进行最后一次提交。
git rev-parse <rev>^
打印
<rev>
的第一个父级。
迄今为止我发现的唯一通用方法。
git reflog show --no-abbrev $(git branch --show-current) | grep "branch: Created from" | awk '{print $1;}'