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

如何将公开分支staging中的旧提交迁移至两个新分支?

公开分支提交迁移与历史调整的实现方案

具体操作步骤

1. 同步本地staging分支

先把本地的staging分支更新到远程最新状态:

git checkout staging
git pull origin staging

2. 搭建feature-a分支并迁移B、C提交

  • 基于提交A新建feature-a分支(可以用git log找到A的提交哈希,或者用相对位置staging~8——从当前staging的末端I往前数8个提交就是A):
git checkout -b feature-a <A的提交哈希>
# 或者用相对位置快速创建:git checkout -b feature-a staging~8
  • 把提交B和C复制到feature-a分支上:
git cherry-pick <B的提交哈希> <C的提交哈希>

完成后feature-a的分支结构就变成A - B - C了。

3. 搭建feature-b分支并迁移D、E、F提交

  • 同样基于提交A新建feature-b分支:
git checkout -b feature-b <A的提交哈希>
# 或者用相对位置:git checkout -b feature-b staging~8
  • 把提交D、E、F复制到feature-b分支上:
git cherry-pick <D的提交哈希> <E的提交哈希> <F的提交哈希>

完成后feature-b的分支结构就是A - D - E - F。

4. 调整staging分支到目标状态

因为staging是公开分支,调整历史后得强制推送,但要尽量避免覆盖别人的新提交:

  • 切回staging分支:
git checkout staging
  • 把staging分支重置到提交G(找G的提交哈希,或者用相对位置staging~2——从I往前数2个就是G):
git reset --hard <G的提交哈希>
# 或者用相对位置快速重置:git reset --hard staging~2
  • 强制推送到远程staging分支(用--force-with-lease比直接--force更安全,能防止误覆盖他人刚推送的提交):
git push --force-with-lease origin staging

重要提醒

  • 一定要通知所有协作的开发者:因为staging的历史被改写了,其他有本地staging分支的人必须执行以下命令同步,否则会出现冲突:
    git fetch origin
    git reset --hard origin/staging
    
  • 快速找提交哈希:可以用git log --oneline查看所有提交的简短哈希和说明,方便快速定位A、B、C等提交的位置。

内容的提问来源于stack exchange,提问作者Timothy Fisher

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:05:21