查找远程分支的公共合并提交ID

时间:2013-11-06 03:14:12

标签: git git-merge

简而言之,我想知道origin上也可以找到的最新提交ID。 我可以创建许多分支,从特定的提交ID创建树,但所有分支都来自那个也在origin上找到的提交ID。

git merge-base要求两个分支。获取当前分支名称没有问题(HEAD),但我不知道如何获取远程分支的名称。不仅是任何远程分支,而是当前分支最近派生的分支。这是可能的,还是我需要采取另一种方法?我可以做什么的暗示?

1 个答案:

答案 0 :(得分:2)

如果你知道你正在寻找哪个远程分支,你可以说:

git merge-base master origin/master

如果你只是有一个任意的本地提交,并想知道你从哪个分支分支,你可以给git merge-base多个远程分支:

git merge-base HEAD origin/master origin/feature-xy origin/something

如果你甚至不清楚什么远程分支可能是正确的,你必须自己去。生成所有远程分支的列表,并将它们传递给git merge-base,如上所述。或者使用git rev-list遍历本地历史记录并使用git branch -r --contains查看是否存在包含给定提交的远程分支。


另一种方法是使用:

git log --boundary --decorate --graph HEAD --not --remotes

这将列出不在任何远程分支中的所有提交以及远程(边界)的第一次提交。在边界提交上使用git branch -r --contains $SHA1来了解涉及哪个远程分支。


Forethinker的最终解决方案:

如果你只想要远程的第一次提交的SHA-1:

git rev-list --boundary HEAD --not --remotes | tail -1 | grep -o -E -e "[0-9a-f]{40}"