如何把 master 上未提交的改动转移到新分支

在 master/main 上改错了地方?直接 git checkout -b <新分支> 即可——未提交改动会跟着你到新分支,再正常提交。改动跨分支冲突时才需要 git stash 中转。

最佳实践
Git 提交历史与版本恢复示意

最简单的情况直接切分支就行:git checkout -b 新分支名。 Git 的未提交改动(工作区和暂存区)不属于任何分支,切换分支时它们会原样带过去——切到新分支后正常 git add + git commit,改动就落在正确的分支上了。

标准流程

# 当前在 master,已有未提交改动
git checkout -b feature/should-have-been-here
git add -A
git commit -m "这些改动本该在功能分支上"

master 保持干净,改动全部到了新分支。

什么时候需要 stash

只有当切换分支会与你的改动冲突(新分支与 master 在这些文件上有分歧)时 Git 会拒绝切换。这时用 stash 中转:

git stash                        # 暂存改动,工作区恢复干净
git checkout -b feature/new      # 现在可以切了
git stash pop                    # 把改动放回来
git add -A && git commit -m "..."

已经误提交到 master 了怎么办

git branch feature/oops          # 1. 在当前提交建分支(保住成果)
git reset --hard origin/master   # 2. master 退回远程状态(或 HEAD~1 退一个提交)
git checkout feature/oops        # 3. 到新分支继续

常见问题(FAQ)

Q:checkout -b 切分支会丢改动吗?

不会。Git 只在改动会被覆盖时阻止切换;顺利切换意味着改动原封不动跟过来了。

Q:stash pop 冲突了怎么办?

像解决普通合并冲突一样编辑冲突标记,然后 git add。解决完 stash 条目默认保留,确认无误后 git stash drop 删掉。

Q:能只把部分改动带去新分支吗?

可以:git stash -p 交互式选择要 stash 的部分,其余留在原地;或先在新分支提交一部分,剩下的 checkout 回去再处理。

参考资料

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台