代码写错分支拯救指南
前言
不小心改动在test分支,而非自己的feature/xxx上,就先本地commit,记录本次的commitId然后切换到feature/xxx,最后git cherry-pick commitId即可记得到test将刚才的commit 回退
这就是日常 Git 操作中最经典的“代码写错分支”拯救指南之一!你使用的逻辑完全正确,通过 cherry-pick 能够非常精准地把提交“移”回正确的分支。
针对你提到最后要去 test 分支把刚才误提交的 commit 回退,这里提供两种最优雅的处理方式,取决于你是否已经把 commit 推送(push)到了远端 test 分支:
情况一:本地 commit,尚未 git push(推荐做法)
如果刚才在 test 上的 commit 只是保存在本地,千万不要在 test 上做额外的撤销 commit,直接用 git reset 将指针拉回即可,干净不留痕迹:
# 1. 切换到你的特性分支
git checkout feature/xxx
# 2. 把刚刚记录的 commit 拿过来
git cherry-pick <commitId>
# 3. 切回 test 分支
git checkout test
# 4. 直接撤销最后一次 commit(保留改动的暂存状态或直接丢弃均可)
# 如果刚才 cherry-pick 已经成功到了 feature/xxx,这里可以直接干掉 test 上的最后一次提交:
git reset --hard HEAD~1
提示:使用
git reset --hard HEAD~1会让test分支干净得就像什么都没发生过一样,完全不会留下历史记录。
情况二:误提交且已经 git push 到远端 test
如果该 commit 已经被推到了共享的远端 test 分支,为了不影响其他同学拉取代码,不建议强行 force push,此时应当采用 git revert:
# 1. 切换到 feature/xxx 并拣选 commit
git checkout feature/xxx
git cherry-pick <commitId>
# 2. 切回 test 分支
git checkout test
# 3. 产生一个新的反向提交来抵消误提交
git revert <commitId>
# 4. 将撤销操作推送到远端
git push origin test
💡 极速小技巧(补充)
如果你在 test 分支写了代码但还没有 commit,不需要 commit 也能切分支!直接使用 stash 暂存区更省事:
# 1. 暂存未提交的代码
git stash
# 2. 切到目标分支
git checkout feature/xxx
# 3. 恢复并应用暂存的代码
git stash pop

浙公网安备 33010602011771号