确定Git存储库是否包含特定提交

Jos*_*osh 4 git contains commit

我想确定远程git存储库(origin)是否包含特定的提交.我的用例如下:

我正准备创建一个公开发布.我想要包含代表我正在构建发行版的原始代码库的提交的SHA-1.

我还想确保提交不仅仅是一个本地提交,而且它实际上已被推送到中央存储库(origin).

我认为


git pull --all & git branch --contains commit-hash

然后检查输出以查看它是否包含当前分支的跟踪分支,有效,但看起来相当麻烦.我正在寻找一些更简洁的东西,比如git remote --contains origin commit-hash,或者git cat-file origin commit-hash.我认为在推送或拉动期间确定哪些对象需要传输时,Git必须使用一些管道命令 - 我对内部结构不够熟悉.

谢谢您的帮助.

Bri*_*ips 5

怎么样: git fetch && git branch -r --contains <commit-id>


Cas*_*bel 5

我可能忽略了一些管道太多,但据我所知,测试最直接的方式,如果commitA是commitB的祖先是检查是否git merge-base commitA commitBcommitA.首先获取,然后因为它们可能是分支,使用rev-parse获取commitA的SHA1:

if [ "$(git rev-parse $commitA)" == "$(git merge-base $commitA $commitB)" ]; then ...; else ...; fi
Run Code Online (Sandbox Code Playgroud)

用别名包裹它,你应该设置.

至于在push和fetch(pull)期间,这些是用C实现的,所以它们不直接调用任何暴露的管道命令.