本地转移新分支到新仓库
要将本地feat
分支相对于main
分支的所有提交转移到另一个仓库的main
分支,可通过生成patch文件+应用patch的方式实现,具体步骤如下:
步骤1:在原仓库生成patch文件
在本地原仓库中,通过git format-patch
命令导出feat
分支相对于main
分支的所有提交为patch文件(每个commit对应一个patch)。
-
切换到原仓库的
feat
分支(确保工作区干净,无未提交修改):git checkout feat
-
生成
feat
相对于main
的所有commit的patch文件:# 格式:git format-patch 基准分支..目标分支 -o 输出目录 git format-patch main..feat -o patches
main..feat
:表示“feat
分支比main
分支多出来的所有提交”。-o patches
:指定将patch文件输出到当前仓库下的patches
文件夹(方便管理,可自定义名称)。
执行后,
patches
文件夹中会生成一系列以0001-xxx.patch
、0002-xxx.patch
命名的文件(按提交顺序排列)。
步骤2:在新仓库应用patch文件
将生成的patch文件复制到新仓库,通过git am
命令批量应用,保留原提交历史。
-
准备新仓库:
拉取新仓库并切换到main
分支(确保与原仓库的main
分支基础一致,避免冲突):git clone <新仓库地址> # 拉取新仓库 cd <新仓库目录> git checkout main
-
复制patch文件到新仓库:
将原仓库patches
文件夹中的所有.patch
文件复制到新仓库的任意目录(例如新仓库根目录)。 -
应用所有patch文件:
在新仓库的main
分支下,执行以下命令批量应用patch:# 假设patch文件在新仓库的patches目录下 git am patches/*.patch
- 如果应用过程中出现冲突,终端会提示冲突文件。解决冲突后,执行:
git add <冲突文件> # 标记为已解决 git am --continue # 继续应用剩余patch
- 若需放弃应用,执行:
git am --abort
。
- 如果应用过程中出现冲突,终端会提示冲突文件。解决冲突后,执行:
结果说明
执行完成后,新仓库的main
分支会包含feat
分支相对于原仓库main
分支的所有提交,且保留原提交的作者、时间、提交信息等完整历史。
关键命令总结:
- 生成patch:
git format-patch main..feat -o patches
- 应用patch:
git am patches/*.patch