git:检查是否在远程repo中提交xyz?

git:检查是否在远程repo中提交xyz?,git,Git,我在本地分支中有一个提交xyz,我想检查它是否包含在远程发布存储库中;我能用简单的方法做吗?我可以克隆远程回购,但我希望有一种更好更快的方式gitlsremote似乎很有希望,但在那里我没有发现任何有价值的东西。谢谢 让我们假设引用远程存储库的远程称为origin。在这种情况下,首先使用以下命令更新所有远程跟踪分支: git fetch origin 现在,您可以使用有用的--contains选项git branch,找出哪些远程分支包含该提交: git branch -r --contain

我在本地分支中有一个提交xyz,我想检查它是否包含在远程发布存储库中;我能用简单的方法做吗?我可以克隆远程回购,但我希望有一种更好更快的方式
gitlsremote
似乎很有希望,但在那里我没有发现任何有价值的东西。谢谢

让我们假设引用远程存储库的远程称为
origin
。在这种情况下,首先使用以下命令更新所有远程跟踪分支:

git fetch origin
现在,您可以使用有用的
--contains
选项
git branch
,找出哪些远程分支包含该提交:

git branch -r --contains xyz
-r
表示仅显示远程跟踪分支。)如果提交
xyz
包含在一个或多个远程跟踪分支中,您将看到如下输出:

  origin/test-suite
  origin/HEAD -> origin/master
  origin/master
如果它包含在本地存储库中,但不是某个远程跟踪分支,则输出将为空。但是,如果您的存储库中根本不知道该提交,您将收到错误
格式错误的对象名称
和一条用法消息-如果您没有预料到,可能会有点混乱…

就像Mark所说的

 git branch -a --contains commitish
但是,要注意包含提交的樱桃挑选/重定基础/合并版本的分支

这可能会派上用场

 git log --cherry-pick --left-right <commitish> ^remote/branchname
git日志--樱桃色选择--左右^remote/branchname
只有在远程分支中不存在提交(作为cherrypick)时,它才会列出提交。有关--cherry pick如何识别等效提交的说明,请参见日志手册页


当然,不能像这样自动检测具有冲突解决方案或挤压的合并/重定基址现有答案要求在本地下载整个远程存储库。如果远程设备有许多尚未在本地克隆的提交,这可能需要很长时间。例如linux稳定存储库,它有许多从未合并的独立分支。跟踪稳定内核的人可能只克隆该内核的单个分支。需要获取每个稳定系列内核的所有分支,以查看提交是否存在,这需要下载更多的数据

在不获取整个远程回购协议的情况下,似乎没有一个好的方法可以做到这一点。这种能力是基于
git fetch pack
git send pack
的工作方式而存在的,但似乎没有一种方法能够以所需的方式使用它

将分支推送到远程存储库不会上载远程存储库已有的提交,而且这是在不首先下载整个远程存储库的情况下完成的。尝试获取远程提交不需要下载整个远程存储库来确定请求的提交是否存在

在某些情况下,后者可用于实现所要求的目标

git fetch origin <commit ID>
git获取来源
如果远程设备没有该提交,则此操作将失败。不需要在本地克隆远程存储库就可以做到这一点。如果远程设备确实有提交,那么它会获取它。没有选择,只是看看提取是否有效,但不提取任何内容。当然,如果提交已经在本地可用,那么就不需要获取任何内容,而且这不是一个代价高昂的操作


某些远程存储库不允许请求非分支或标记头的内容。在这种情况下,这是行不通的。

有没有办法用git管道实现这一点?@dpk:我可能会用
git对每个ref
迭代远程跟踪分支,并通过检查
git merge base
是否与
相同来测试每个分支中是否包含提交。()将避免错误消息和用法消息。但只有在大型回购新克隆的Git 2.18(2018年第2季度)中,我还必须运行
Git gc
,然后
Git branch-r——contains xyz
才能有效运行。seond行(
cherry pick
)只有在提交内容相等(除了空格)的情况下才有效,举个例子,当我选择樱桃时,我希望空格是重要的。如果没有手动编辑(例如,存在合并冲突),则您希望更改集是相同的。但是,是的,樱桃采摘检测是有限的。它在日常使用中仍然非常非常好是的,我认为它也很好,我只是想在这里记下它,因为我尝试过,巧合的是,我恰好在这个问题上绊倒了,并且花了很多时间来找出为什么我的樱桃采摘检测不起作用。最初的提交更改了3行,其中一行已经由另一行提交完成,因此没有任何冲突,cherry pick只剩下两行。->不是批评,只是有用的暗示。