如何 在不签出的情况下在远程存储库上使用merge-base
with ?Git
使用ls-remote
效果很好,例如用于确定这样的分支:
git ls-remote --heads $REPO_URL/$REPO_NAME
该文档不包含任何线索,是否可以使用merge-base
with ls-remote
。也许也可以使用替代方法merge-base
来找到分支/提交的共同祖先。
目前,我必须在本地签出存储库,这对于大型项目来说需要很多时间。
通常,no:ls-remote
会在远程向您显示所请求引用的提交 ID,但对于每个提交 ID,如果您在本地没有该提交,则无法确定其父提交。
不过,无需检查提交。只需使用git fetch
来带回任何丢失的对象,然后您将拥有完整的存储库历史记录。未来git fetch
将继续只带来丢失的对象,这将是您无论如何都需要以找到项目的新对象。
我不知道您要尝试做什么,git merge-base
但除了新--fork-point
操作之外,它只需要提交 ID,它使用您的本地 reflog,因此需要本地引用名称。例如:
$ git merge-base 9b1c2a3a8e625ea7f56e9ba3d3c0e31938faa738 \
> bba6acb335e296ed692b4aea224b50fd098f693c
ebc5da3208824e25a89672a3b91bd13629b215fe
这告诉我9b1c2a...
and的合并基础bba6acb...
是ebc5da3...
. (所有这些都是存储库中的提交 ID,其中包含 git 本身的源。)并且:
$ git branch -a --contains ebc5da3208824e25a89672a3b91bd13629b215fe
* master
remotes/origin/maint
remotes/origin/master
remotes/origin/next
remotes/origin/pu
告诉我们合并基础包含在四个远程分支中:maint
、master
、next
和pu
,以及本地分支(无论如何master
都是同步的)。origin/master
更有趣的是:
$ git describe ebc5da3208824e25a89672a3b91bd13629b215fe
v2.0.2
告诉我们合并基础被标记为 git 版本 2.0.2,因此这两个其他提交(从日志中任意选择)在该特定标记处具有共同祖先。