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=
fetches 选项,所以我改为使用git fetch depth=$x
增加的x
.
解决方案
推荐阅读
- apache-kafka - 使用 Salesforce 的 Kafka 主题
- sql-server - 捕获意外退出的 SQL Server 存储过程
- active-directory - RFC 2253 - 轻量级目录访问协议 (v3)
- html - 悬停在垫卡上
- angular - 可选择的国家列表
- c# - Xamarin.Forms 中的 IOS 联系人邮政地址
- python - Jupyter Notebook:新增功能无法访问
- r - R中关联规则的数据准备 - 数据帧到事务
- python-3.x - 如何使用python将多个表添加到word中的同一个文档?
- java - util.Collections 是如何使用的