You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git如何创建提交内容相同但哈希独立的分支完整副本?

快速创建独立提交副本分支的实现方法

你需要的分叉提交结构不需要手动逐笔重提,Git自带的原生命令就能直接实现,全程不会改动原有main分支的任何提交内容。

实现原理

你担心的共有提交被修改影响备份分支的问题,本质是因为Git默认会复用哈希一致的提交对象,只要让Git把B到E的所有提交重新生成独立的提交对象(哪怕内容、提交信息完全一致),两个分支除了根提交A之外就不会有其他关联,修改任意分支的历史提交都不会互相影响。

操作步骤

  • 先获取提交A的哈希值,可在main分支下执行git log --oneline查看历史提交列表,复制A对应的哈希串。
  • 基于提交A创建并切换到新分支main-copy:
git switch -c main-copy <提交A的哈希值>
  • 执行带--no-ff参数的rebase命令,强制重放main分支上A之后的所有提交,生成全新的独立提交副本:
git rebase --no-ff main

执行完成后,用git log --oneline --graph --all查看提交结构,就能得到你预期的效果:

* E (HEAD -> main) 提交E说明
* D 提交D说明
* C 提交C说明
* B 提交B说明
| * E' (main-copy) 提交E说明
| * D' 提交D说明
| * C' 提交C说明
| * B' 提交B说明
|/
* A 提交A说明

其他可选方案

如果你更习惯用cherry-pick,也可以在切到A点的main-copy分支后,执行区间拣选命令实现相同效果:

git cherry-pick <提交B的哈希值>^..<提交E的哈希值>

这个命令会把B到E区间的所有提交逐笔应用到当前分支,生成全新的B'到E'提交,效果和rebase方案一致,只是需要手动确认B和E的哈希值,操作稍繁琐。

注意:不要直接在E点执行git branch main-copy创建分支,这种方式创建的分支和main完全共用所有提交对象,一旦修改A-B区间的历史提交,两个分支都会被改动,达不到独立备份的目的。

内容的提问来源于stack exchange,提问作者Mohamad Bakhtiari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:06:27