误从master分支创建feature分支,如何改基于develop分支?
修正错误分支来源的方法
场景1:feature分支仅在本地,未推送到远程
这是最常见且简单的情况,直接通过rebase迁移提交即可:
- 切换到目标feature分支:
git checkout feature - 将feature分支的提交重新基于develop分支构建:
git rebase develop
执行后,G、H两个提交会从master的C节点转移到develop的F节点之后,完全符合你期望的分支结构。- 如果遇到冲突,解决冲突后执行
git rebase --continue继续迁移 - 若想放弃操作,执行
git rebase --abort恢复到操作前状态
- 如果遇到冲突,解决冲突后执行
场景2:feature分支已推送到远程仓库
由于rebase会修改提交历史,需要配合强制推送更新远程分支,注意仅在你是该分支唯一维护者时使用:
- 先完成场景1中的本地
rebase操作 - 安全强制推送更新远程分支:
git push --force-with-rewrite origin feature
推荐使用--force-with-rewrite而非--force,它会检查远程分支是否存在他人新增的提交,避免误覆盖他人工作。
备选方案:使用cherry-pick迁移提交
如果不想修改提交历史,可以用cherry-pick复制提交到正确的分支上:
- 切换到develop分支:
git checkout develop - 创建新的feature分支:
git checkout -b feature-new - 复制原feature分支的G、H提交到新分支:
git cherry-pick <G的提交哈希> <H的提交哈希>
提交哈希可通过git log feature查看,取前几位即可 - 删除原错误的feature分支:
- 本地删除:
git branch -D feature - 远程删除(若已推送):
git push origin --delete feature
- 本地删除:
- 将新分支推送到远程:
git push origin feature-new
之后可根据需要将新分支重命名为feature
内容的提问来源于stack exchange,提问作者Paris Karagiannopoulos
相关产品推荐
相关产品推荐

