在浅表克隆中变基础

时间:2020-04-06 18:49:13

标签: git

在浅克隆存储库中工作时,如何可靠地执行变基?假设我有一个分支feature,我想将其立足于master。我通常如何做的是git fetch更新master分支,然后是git rebase master以重新建立基础(从feature分支)。但是,如果我理解正确,那么必须正确地执行两个分支的最新共同祖先,才能正确执行变基。

例如,假设整个历史记录如下:

      D-E (master)
     /
A-B-C
     \
      F-G (feature)

我希望它最终像这样:

A-B-C-D-E (master)-F-G (feature)

如果我克隆存储库的深度为2,那么在本地历史记录将如下所示:

D-E (master)
F-G (feature)

所以我的计划是将历史扩展到有一个共同的祖先,如下所示:

while [ -z $( git merge-base master feature ) ]; do     
    git fetch --deepen=100;
done

这一切都很好。但是,有时我会遇到这样的问题,即我的本地历史记录最终看起来像以下内容(其中*表示嫁接):

  D*-E (master)
 /
B*
 \
  F*-G (feature)

我不明白我的本地存储库如何最终处于这种状态,如果处于这种状态,如何获取历史记录中的C。我发现的唯一解决方案是暂时使克隆不浅,但这非常耗时和空间,因此我想找到一个更好的解决方案。

注意:这是问题的简化版本。我正在运行的精确克隆命令是git clone https://... --depth=8 --single-branch,根据git log,我在历史记录中最终得到28个提交(其中7个已被移植,第一个出现在17个提交之前)。这对我来说毫无意义,因为我对--depth=选项的理解是,我应该以8次提交结束,最后一次提交是嫁接的。另外,我的遥控器在提取时不支持--deepen=选项,因此我将git fetch depth=$xx一起使用。

0 个答案:

没有答案