git切换分支(如果当前分支所做的修改没有提交此时如何切换去其他分支)
问题描述
今天遇到一个git分支切换的问题,我在分支A上做了修改,然后切换到分支B后,发现分支B上也存在着分支A上的修改。
原因
如果当前分支所做的修改没有提交就切换去其他分支的话,那么也会看到相同的修改
解决方法
解决方法有两种:
方法一:
用 git add 和 git commit 提交修改,只要用 git status 检查工作区和暂存区是干净的就可以了。(所谓的干净就是指不显示有修改的痕迹,即git status显示没有内容被修改)
方法二:
如果我当前分支上的工作还没做完,不能提交,但又想去其他分支,这时候可以把当前分支的工作现场隐藏起来。用 git stash 隐藏当前工作现场,这个时候用 git status 查看工作区是干净的,所以就可以放心地去其他分支了。用 git stash list 可以查看隐藏起来的工作现场。
恢复工作现场的两种方法:
1.用 git stash apply 恢复。恢复后,stash list中并不删除恢复的stash,需要用 git stash drop 来删除。
2.用 git stash pop,恢复的同时把stash内容也清空了,这时候再用 git stash list 就看不到stash了。
修改内容时可以多次 stash ,恢复的时候,先用 git stash list查看,然后用 git stash apply stash@{0} 或者 git stash pop stash@{0} 来恢复指定的stash。
总结
1.在没有commit 时(无论有无add),进行切换分支操作后,原分支修改的内容在新分支上也有。
有时候也无法切换分支,原因如切换时会提示会覆盖另一个分支文件的内容。
此时可以强制切换git checkout branchname -f ,但最好不要这么做,否则会丢失之前分支的修改内容,可以先stash或commit,再切换。
2.已经 add 并且 commit 时,进行切换分支操作后,新分支上就看不到原分支修改的内容了。
本质:一个本地的git repo只有一个工作区和暂存区,但是有多个分支的提交区,而我们的checkout只是将HEAD指针从一个分支切换到另一个分支。