如何使用git移动历史commit(当你提交到错误的 Git 分支时该怎么办)

当意外将提交推送到错误的Git分支时,可以通过撤销并重新提交到新分支或直接移动commits来解决。方法一包括撤销master分支上的提交,创建新分支并提交;方法二涉及修改refs,将commits移到新分支。两种方法各有优缺点,前者简单但可能丢失原始提交信息,后者更灵活但需谨慎操作。在操作前确保备份,并在推送前检查结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

翻译自: 当你提交到错误的 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,因为有的话它们将被覆盖掉

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉风小宇

请我喝个咖啡呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值