git:检查是否在远程仓库中提交xyz?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git:检查是否在远程仓库中提交xyz?相关的知识,希望对你有一定的参考价值。
我在我的本地分支中有一个提交xyz,我想检查它是否包含在远程发布存储库中;我能以一些简单的方式做到吗?我可以克隆远程仓库,但我希望有一个更好的+更快的方式。 git ls-remote
看起来很有希望,但在那里找不到任何有价值的东西。谢谢!
假设引用远程存储库的远程控制器称为origin
。在这种情况下,首先使用以下命令更新所有远程跟踪分支:
git fetch origin
现在,您可以使用--contains
的有用git branch
选项来找出哪些远程分支包含该提交:
git branch -r --contains xyz
(-r
表示只显示远程跟踪分支。)如果提交xyz
包含在一个或多个远程跟踪分支中,您将看到如下输出:
origin/test-suite
origin/HEAD -> origin/master
origin/master
如果它包含在本地存储库中,但不包含在远程跟踪分支之一中,则输出将为空。但是,如果您的存储库中根本不知道该提交,您将收到错误malformed object name
和用法消息 - 如果您不期待它可能会有点混乱......
像马克说的,
git branch -a --contains commitish
但是,请注意包含提交的挑选/重新定位/合并版本的分支。
这可能会派上用场
git log --cherry-pick --left-right <commitish> ^remote/branchname
如果它在远程分支中不存在(作为cherrypick),它将仅列出提交。有关--cherry-pick如何识别等效提交的说明,请参见日志手册页
当然,不能像这样自动检测具有冲突解决方案或南瓜的合并/转换
现有答案要求在本地下载整个远程存储库。如果远程有许多尚未在本地克隆的提交,则可能需要很长时间。一个例子就像linux-stable存储库,它有许多永不合并的独立分支。跟踪稳定内核的人可能只克隆该内核的单个分支。需要为每个稳定的系列内核获取所有分支,以查看是否存在提交将需要下载更多数据。
如果没有获取整个远程仓库,似乎没有一个好方法。基于git fetch-pack
和git send-pack
的工作方式,能力就在那里,但似乎没有办法以期望的方式使用它。
将分支推送到远程存储库不会上载远程已有的提交,并且无需先下载整个远程存储库即可完成此操作。尝试获取远程提交不需要下载整个远程存储库以确定是否存在所请求的提交。
后者可用于实现某些情况下的要求。
git fetch origin <commit ID>
如果远程没有该提交,则此操作失败。无需在本地克隆远程存储库即可。如果远程确实有提交,那么它将获取它。没有选择只是看看fetch是否有效但没有取任何东西。当然,如果提交已在本地可用,则不需要提取任何内容,这不是一项代价高昂的操作。
某些远程存储库不允许请求不是分支或标记头的东西。在这种情况下,这将无效。
以上是关于git:检查是否在远程仓库中提交xyz?的主要内容,如果未能解决你的问题,请参考以下文章