如何在远程使用git merge-base?

时间:2014-07-28 07:28:57

标签: git git-merge ls-remote

如何在远程存储库中使用merge-base Git而不检查它?使用ls-remote可以正常工作,例如用于确定这样的分支:

git ls-remote --heads $REPO_URL/$REPO_NAME

documentation不含任何线索,merge-basels-remote的使用是可能的。也许有可能使用merge-base的替代方法来找到分支/提交的共同祖先。

目前,我必须在本地检查存储库,这需要花费大量时间进行大型项目。

1 个答案:

答案 0 :(得分:2)

通常,不会:ls-remote向您显示所请求引用的远程提交ID,但对于每个提交ID,如果您在本地没有该提交,则无法确定其父提交

虽然没有必要检查提交。只需使用git fetch来删除任何丢失的对象,然后您将拥有完整的存储库历史记录。未来git fetch将继续仅带来缺失的对象,这些对象将是您无论如何都需要的新对象。

我不知道你试图用git merge-base做什么,但除了新的--fork-point操作之外,它只需要提交ID,它使用你的本地reflog,因此需要本地引用-名称。例如:

$ git merge-base 9b1c2a3a8e625ea7f56e9ba3d3c0e31938faa738 \
> bba6acb335e296ed692b4aea224b50fd098f693c
ebc5da3208824e25a89672a3b91bd13629b215fe

这告诉我9b1c2a...bba6acb...的合并基础是ebc5da3...。 (所有这些都是包含git本身源代码的存储库中的提交ID。)并且:

$ git branch -a --contains ebc5da3208824e25a89672a3b91bd13629b215fe
* master
  remotes/origin/maint
  remotes/origin/master
  remotes/origin/next
  remotes/origin/pu

告诉我们合并库包含在四个远程分支中:maintmasternextpu,以及本地分支{{1} (无论如何,它与master同步)。更有趣的是:

origin/master

告诉我们,merge-base被标记为git版本2.0.2,因此这两个其他提交(从日志中任意选择)在该特定标记处具有共同的祖先。