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