如何在当前分支将历史commit作为新HEAD且保留原有提交链?
操作步骤
前提:先执行 git log --oneline 拿到提交C和提交F的短哈希值,确保当前工作区无未提交的改动,HEAD默认指向最新的F提交。
第一阶段:生成 F → C → C2 提交链
- 执行
git cherry-pick <C的哈希值>,会在当前F提交后自动生成一个内容和原C完全一致的新提交,也就是你需要的F后的C提交。 - 对代码做你需要的少量修改,完成后执行
git add .暂存改动。 - 执行
git commit -m "你的C2提交信息",生成C2提交,此时提交链已经变为A-B-C-D-E-F-C-C2。
第二阶段:生成最终提交链
如果你需要的最终提交链是线性的 A-B-C-D-E-F-C-C2-F-F2:
- 执行
git cherry-pick <F的哈希值>,会在C2后生成内容和原F完全一致的新提交。 - 做你需要的F相关修改,完成后执行
git add .暂存改动。 - 执行
git commit -m "你的F2提交信息",即可得到目标线性提交链,所有原有提交记录完全保留。
如果你需要先将HEAD切回原F提交,基于原F直接生成F2(此时提交历史会分叉,原F同时有C、F2两个子提交,原有C、C2提交不会被删除):
- 执行
git switch -d <F的哈希值>,此时HEAD会直接指向原F提交,之前生成的C、C2提交仍会保存在git记录中不会丢失。 - 做你需要的F相关修改,完成后执行
git add .暂存改动。 - 执行
git commit -m "你的F2提交信息"即可生成F2提交。
注意事项
所有操作都是新增提交,没有修改/删除原有提交历史,直接正常推送到远程即可,不会产生历史冲突。
内容的提问来源于stack exchange,提问作者BobbKitty729
相关产品推荐
相关产品推荐

