翻译自: 当你提交到错误的 Git 分支时该怎么办(What to do when you commit to the wrong Git branch.)
1. 故事背景
某日你正在享受编码的美好时光,并且作为一个优秀程序员,你总会定期commit
然后你突然发现最近的几次提交,都到了错误的分支。现在怎么办?
这就是我们正在将要谈的Git,好消息是处理起来并不很难
假设你提交到了 master,但是其实你原本打算提交到名为myfeature的新分支,那么有两件事需要修复。首先,你需要将 master 恢复到原来的位置。其次,你需要在新分支上进行更新commit
现在你有两个选择:
- 撤消
master上的提交,checkout到新分支myfeature并将所有更改作为一个整体的commit提交 - 手动修改
refs以使master指向你所在的位置,以及新分支ref的位置。
第一个解决方案很好,简单且易于应用,有相对较小的犯错空军。然而缺点是不会在新分支上获得原始提交消息,并且所有更改都作为一条带有新提交消息的单个commit提交
第二种解决方案更加合理。然而,这意味着你所有的提交都被传递到新的分支。当然,你应该在推送到中央仓库之前检查结果,因此会比较容易出错
2. 处理方法
2.1 撤消并提交到新分支
确保你在一直提交的分支上。使用 git log 检查您要回滚的提交次数。然后使用 git reset HEAD~N 撤消提交,其中“N”是您要撤消的提交数。
例如,要撤消一个提交:
git reset HEAD~1
然后创建一个新分支并checkout(签出),再次add(添加)并commit(提交)您的更改。
git checkout -b newbranch
git add -A
git commit -m "Committed on new branch"
请注意,使用git add -A时,可能会添加不相关的未提交文件和目录。建议在提交检查之前使用git status 查看
2.2 将commits移至另一个分支
为了获得更大的错误余地。第一步是记下想要成为新分支头结点的commit的 commit id
git log
将commit id复制到一个安全的地方
然后通过一次commit(或者无论多少次您需要退回的commit)重置您当前的分支:
git reset --hard HEAD~1
最后一步是将随后的提交移动到新分支:
git checkout -b newbranch
git reset --hard < commit_id >
已经完成了!现在是时候推送两个分支了(如果需要,使用 --force,即如果您之前推送了更改). 但是,与往常一样,使用 --force 时请确保没有其他commit跟随您的commit,因为有的话它们将被覆盖掉
当意外将提交推送到错误的Git分支时,可以通过撤销并重新提交到新分支或直接移动commits来解决。方法一包括撤销master分支上的提交,创建新分支并提交;方法二涉及修改refs,将commits移到新分支。两种方法各有优缺点,前者简单但可能丢失原始提交信息,后者更灵活但需谨慎操作。在操作前确保备份,并在推送前检查结果。
2862

被折叠的 条评论
为什么被折叠?



