首页 > 解决方案 > 在浅克隆中变基

问题描述

在浅克隆存储库中工作时,如何可靠地执行变基?假设我有一个分支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=fetches 选项,所以我改为使用git fetch depth=$x增加的x.

标签: git

解决方案


推荐阅读