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