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必须使用一些管道命令 - 我对内部结构不够熟悉.
谢谢您的帮助.
我可能忽略了一些管道太多,但据我所知,测试最直接的方式,如果commitA是commitB的祖先是检查是否git merge-base commitA commitB是commitA.首先获取,然后因为它们可能是分支,使用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实现的,所以它们不直接调用任何暴露的管道命令.