简而言之,我想知道origin
上也可以找到的最新提交ID。
我可以创建许多分支,从特定的提交ID创建树,但所有分支都来自那个也在origin
上找到的提交ID。
git merge-base
要求两个分支。获取当前分支名称没有问题(HEAD),但我不知道如何获取远程分支的名称。不仅是任何远程分支,而是当前分支最近派生的分支。这是可能的,还是我需要采取另一种方法?我可以做什么的暗示?
答案 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}"