如何将master分支中当前未提交的工作转移至其他分支?
解决未提交改动从master转移到新分支的简单方法
嘿,这个场景我太熟了!完全不用先把改动提交到master,有个超简单的一步到位方法:
- 直接创建并切换到新分支:在当前master分支(带着未提交改动)的状态下,运行下面任意一个命令:
这两个命令都会立刻创建新分支并切换过去,而且你的所有未提交改动(工作区+暂存区的内容)会自动跟着转移到新分支,完全不需要额外操作!# 传统写法 git checkout -b new-feature-branch # Git 2.23+ 推荐的新写法 git switch -c new-feature-branch
为什么这个方法可行?
Git的未提交改动是存储在工作区和暂存区的,不属于任何特定分支。只要你切换的目标分支和当前分支的文件没有冲突,这些改动就会被保留下来,直接跟着你到新分支里。
关于git reset --soft的疑问
你提到的git reset --soft是在已经把改动提交到master之后才需要用到的场景:比如你不小心把这些临时改动提交到了master,那可以用git reset --soft HEAD~1把这次提交撤销,把改动放回暂存区,然后再创建新分支。但如果还没提交,完全没必要走这一步,直接创建新分支切换过去就好。
额外保险小技巧(可选)
如果你担心操作过程中改动丢失,可以先临时备份一下改动:
# 把未提交改动临时存起来 git stash # 创建并切换到新分支 git switch -c new-feature-branch # 把备份的改动恢复到新分支 git stash pop
不过这属于冗余操作,上面的一步切换方法已经足够安全,除非你遇到了分支切换冲突(这种情况很少见,因为你是从最新的master创建新分支的)。
最后验证一下:切换到新分支后运行git status,你会看到那些未提交的改动都还在,接下来就可以安心在新分支上开发、提交了!
内容的提问来源于stack exchange,提问作者teepee
相关产品推荐
相关产品推荐

