You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

未提交当前分支变更时如何切换Git分支且不转移变更

解决Git分支切换时保留未提交变更的问题

别担心,你要的需求完全能实现!我先给你说最稳妥的标准操作,再解释你之前操作出问题的原因,还有个进阶方案供你选择:

一、用git stash的正确流程(最常用)

其实你选git stash的思路没问题,只是操作环节可能有小疏漏,按下面的步骤来就不会出错:

  1. 确保你当前在feature分支上,执行命令保存未提交的变更:
    git stash push -m "临时存feature的未提交修改"
    
    加-m是给这次存的变更加个备注,之后找起来更方便,不加也能正常用。
  2. 这时候你的feature分支就变成干净状态了,切换到master分支:
    git checkout master
    # 要是你的Git版本在2.23以上,也可以用更直观的git switch master
    
    现在master分支就是完全干净的,放心基于它创建新的feature分支就行:
    git checkout -b new-feature-branch
    
  3. 等你要回到原来的feature分支继续开发时,切回去再恢复之前存的变更:
    git checkout feature
    git stash pop
    
    要是你想保留stash里的记录(怕之后还要用),可以换成git stash apply,两者的区别就是pop会把stash记录删掉,apply会保留。

为啥你之前会出现变更转移?

大概率是你在git stash pop恢复变更后,没留在feature分支上操作,直接切去master了——Git的工作区是全局共享的,未提交的变更会跟着你切换分支走。所以只要恢复变更后老老实实待在feature分支上干活,就不会出现变更跑到master的情况。

二、进阶方案:用git worktree隔离工作区

如果你经常需要在多个分支间跳来跳去,不想频繁stash,推荐用git worktree给每个分支单独弄个工作目录,这样变更完全隔离,互不影响:

  1. 在当前仓库的外面(或者仓库里的子文件夹)创建一个关联master分支的新工作区:
    git worktree add ../master-workspace master
    
  2. 进入这个新目录,里面就是干净的master分支环境,直接创建新分支就行:
    cd ../master-workspace
    git checkout -b new-feature-branch
    
  3. 原来的仓库目录还是保留着feature分支的未提交变更,两边完全独立,想怎么操作都不怕。
  4. 之后要是不需要这个工作区了,直接删掉就行:
    git worktree remove ../master-workspace
    

三、小技巧:管理多个stash记录

如果存了好几个stash,怕搞混的话,可以用git stash list查看所有保存的记录,然后用git stash apply stash@{n}(n是记录的序号,比如stash@{0}是最新的)来恢复指定的变更,避免恢复错内容。

内容的提问来源于stack exchange,提问作者Leff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:12:27