在多人开发的项目中,每一个需求对应一个开发分支,有时候忘记切换分支,在当前分支上做了几次提交,这时需要将这些提交转移到正确的分支,可以使用 git cherry-pick 或 git rebase。
1. git cherry-pick
1)在源分支上查找转移提交的哈希值
git checkout wrong-branch # 源分支
git log --oneline
此处,假设这些提交的哈希值是 commit1、commit2、commit3。
2)切换回目标分支并转移提交
git checkout target-branch
git cherry-pick commit1 commit2 commit3
3)解决可能出现的冲突
git add <conflicted-files>
git cherry-pick --continue
4)回到原分支重置提交
git checkout wrong-branch
git reset --hard HEAD~3
2. git rebase
1)找出需要转移目标分支的提交值
git checkout wrong-branch
git log --oneline
2)切换目标分支进行 git rebase
git checkout <target-branch>
git rebase <wrong-branch> --onto <target-branch>~n <wrong-branch>
这里的 n 是想要转移的提交的次数。
3)解决可能出现的冲突
git add <conflicted-files>
git rebase --continue
4)回到原分支重置提交
git checkout wrong-branch
git reset --hard HEAD~n
5)推送更改到远程仓库
git push --force-with-lease
总结
1、使用 git cherry-pick,当我们只需要转移几个特定的提交,并且需要保留原始的提交哈希值。
2、使用 git rebase,当我们需要将一系列提交从源分钟平滑地转移到目标分支,并且不介意改变提交的哈希值。
在执行这些操作时,请确保完全知道它们的后果,特别是当分支已经被推送到远程仓库时。