Git未提交代码时切换至其他分支的正确方法
这是个很常见的Git场景问题,你踩的坑其实是对git add和暂存区的理解有点偏差——git add只是把修改放到暂存区,但这个暂存区并不是和dev分支绑定的。当你切换到master时,Git会把暂存区的修改带到新分支里(只要文件没有冲突),所以你在master里看到的还是修改后的版本,自然达不到用原始master代码调试的目的。
解决这个问题的最佳方案是使用git stash,它专门用来临时保存未完成的修改,让你可以干净地切换分支。具体操作步骤如下:
第一步:临时保存dev分支的未提交修改
在dev分支下执行:git stash这个命令会把所有未提交的修改(包括已经
git add暂存的和未暂存的)都存到一个临时栈中,你的工作区会立刻回到干净状态(和dev分支最近一次提交的内容一致)。
如果后续想快速识别这个stash的内容,可以加个备注:git stash push -m "dev分支未完成的修改:调试XX功能"第二步:切换到master分支调试
现在可以放心切换到master分支了:git checkout master此时你的工作区和暂存区都是master分支的原始代码,完全可以正常编译调试。
第三步:调试完成后切回dev并恢复修改
调试结束后,切回dev分支:git checkout dev然后恢复之前保存的修改:
git stash pop这个命令会把最近一次stash的内容恢复到当前分支,同时从stash栈中移除该记录。如果你保存了多个stash,可以先执行
git stash list查看所有记录,再用git stash apply stash@{n}(n是列表中的序号)恢复指定的stash,之后用git stash drop stash@{n}删除对应的记录。
补充说明:如果你只是想临时隐藏修改,git stash是最适合的工具——它不会创建新的提交,也不会污染分支历史,完美适配这种“未完成工作需要临时切换分支”的场景。
内容的提问来源于stack exchange,提问作者Blair Fonville

