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

ale*_*lex 5 git git-merge ls-remote

如何 在不签出远程存储库的情况下使用merge-basewith ?Git使用ls-remote效果很好,例如确定这样的分支:

git ls-remote --heads $REPO_URL/$REPO_NAME
Run Code Online (Sandbox Code Playgroud)

文档不包含任何关于是否可以使用merge-basewith的线索。ls-remote也许也可以使用替代方案来merge-base查找分支/提交的共同祖先。

目前,我必须在本地检查存储库,这对于大型项目来说需要大量时间。

tor*_*rek 3

一般来说, no:ls-remote显示远程上所请求引用的提交 ID,但对于每个提交 ID,如果您本地没有该提交,则无法确定其父提交。

不过,无需检查提交。只需使用git fetch来恢复任何丢失的对象,然后您将获得完整的存储库历史记录。未来git fetch将继续只带来丢失的物品,这些物品将是你无论如何都需要找到物品的新物品。

我不知道您正在尝试做什么,git merge-base但它只需要除新--fork-point操作之外的所有操作的提交 ID,其中它使用您的本地引用日志,因此需要本地引用名称。例如:

$ git merge-base 9b1c2a3a8e625ea7f56e9ba3d3c0e31938faa738 \
> bba6acb335e296ed692b4aea224b50fd098f693c
ebc5da3208824e25a89672a3b91bd13629b215fe
Run Code Online (Sandbox Code Playgroud)

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

$ git branch -a --contains ebc5da3208824e25a89672a3b91bd13629b215fe
* master
  remotes/origin/maint
  remotes/origin/master
  remotes/origin/next
  remotes/origin/pu
Run Code Online (Sandbox Code Playgroud)

告诉我们合并基础包含在四个远程分支中:maintmasternextpu,加上本地分支master(无论如何都是同步的origin/master)。更有趣的是:

$ git describe ebc5da3208824e25a89672a3b91bd13629b215fe
v2.0.2
Run Code Online (Sandbox Code Playgroud)

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