Git 分支误操作修复指南 —— 代码写在 master 分支了,其实应该在 dev 分支 【Git 踩坑记录代码已经在 master 上开发了怎么转到 dev 分支的三种修复方案一、场景描述问题场景开开心心写了一下午代码Commit 完了突然发现——啊我应该在 dev 分支开发怎么在 master 上写了一下午相信每个用 Git 的开发者或多或少都遇到过这个问题。别慌Git 有多种方案可以完美解决甚至可以做到零损失迁移。二、方案对比表方案适用场景优点缺点**方案一cherry-pick推荐⭐commit 已经 push 到远程 master精确迁移指定 commit不影响其他提交有多个 commit 需要逐个 pick方案二stash 暂存还没有 commit只是本地修改最简单一行命令搞定只适用于未 commit 的情况方案三reset stash已经 commit 但还没 push一步到位保留 commit 信息需要 reset 回退三、方案详解 方案一cherry-pick最通用推荐使用适用场景代码已经 commit甚至已经 push 到远程 master 了。# 步骤 1先在 master 上查看 commit id git log --oneline # 找到你误操作的那个 commit id假设是 a1b2c3d # 步骤 2切换到 dev 分支 git checkout dev # 步骤 3把那个 commit 搬到 dev 上 git cherry-pick a1b2c3d # 步骤 4可选如果有多个 commit按顺序 cherry-pick git cherry-pick a1b2c3d e4f5g6h h7i8j9k # 步骤 5切回 master把误操作的 commit 删掉如果已经 push git checkout master # 如果已经 push 到远程用 revert 生成反向提交安全不篡改历史 git revert a1b2c3d git push origin master # 如果还没 push直接 reset 掉更干净 git reset --hard HEAD~1cherry-pick 的本质把指定的 commit 复制粘贴 到当前分支生成一个新的 commit。 方案二stash 暂存最简单适用场景代码还在工作区还没有 commit。# 步骤 1把当前修改暂存起来 git stash # 或者给暂存加个备注方便以后找 git stash save 今天写的总平台登录功能 # 步骤 2切换到 dev 分支 git checkout dev # 步骤 3把暂存的代码弹出来 git stash pop # 或者用 apply不删除暂存记录更安全 git stash apply # 步骤 4查看暂存列表如果用了 apply 手动删除 git stash list git stash drop stash{0}stash 的本质把当前工作区和暂存区的修改藏到 Git 的一个临时区域等需要的时候再取出来。 方案三reset stash已经 commit但还没 push适用场景已经 commit 了但还没有 push 到远程。# 步骤 1在 master 上回退一个 commit但保留修改到工作区 git reset --soft HEAD~1 # 解释--soft 保留修改--mixed 保留到工作区--hard 直接丢弃 # 步骤 2暂存起来 git stash # 步骤 3切换到 dev git checkout dev # 步骤 4弹出暂存 git stash pop # 步骤 5在 dev 上重新 commit git add . git commit -m feat: 新增总平台登录功能四、如何避免以后再犯方法 1终端显示当前分支在~/.bashrc或~/.zshrc中配置让终端提示符显示分支名# 显示 git 分支 parse_git_branch() { git branch 2 /dev/null | sed -e /^[^*]/d -e s/* $.*$/ (\1)/ } export PS1\u\h \W$$\033[32m$$\$(parse_git_branch)$$\033[00m$$ $ 效果usermac ~/project (dev) $一眼就能看到当前在哪个分支