同事在群里发了一张图:git checkout dev 之后报了一屏 error,最后一句是 Your local changes would be overwritten by checkout。他以为分支坏了,其实只是工作区有没提交的改动。
先看清楚改了什么
第一步永远是 git status。红色是未暂存,绿色是已暂存,Untracked 是没被跟踪的新文件。只要目标分支和当前分支在这些文件上有差异,Git 就不让切换,怕把你的改动冲掉。
三种处理方式
- 改动要保留:git add 后提交,或者 git stash push -m 说明,切完再 git stash pop。
- 改动不要了:git restore 文件名,或者 git checkout -- 文件名。注意这个操作不可恢复。
- 只是想带着改动去新分支:git switch -c 新分支名,改动会一起过去。
新建和切换的常用写法
新版本 Git 推荐 git switch。切到已有分支用 git switch dev,新建并切过去用 git switch -c feature/login。老版本没有 switch,就用 git checkout dev 和 git checkout -b feature/login,效果一样。
切完发现代码没变
先确认分支真的切了:git branch 前面带星号的那个才是当前分支。另外,未跟踪文件不会因为切换分支消失,它们会一直留在工作区。如果新分支里正好也有同名文件,Git 可能直接覆盖,这一点要留意。
我的习惯是切分支前先跑 git status,看到 clean 再切。多花三秒,省得后面解冲突。