问题描述
使用git checkout命令切换分支时由于当前分支有未跟踪的文件,导致切换失败。
D:\Android\***\*****>git checkout master error: Your local changes to the following files would be overwritten by checkout: app/build.gradle Please commit your changes or stash them before you switch branches. Aborting
提示信息写的比较清楚:
当前分支有未跟踪的文件,checkout 命令会覆盖它们,请缓存(stash)或者提交(commit)。
解决方案
有两种选择:A保存修改;B放弃修改
选择A:未跟踪文件的内容改动很重要,保存修改
两种方法:按照信息提示,分别是:缓存(stash)或者提交(commit)
方法①:存到暂存区
git add . git stash // 取出的时候使用 git stash pop
方法②:发起一个commit 存到提交历史
git add . git commit -m "commit message"
选择B:未跟踪文件的内容改动不重要,放弃修改
两种方法:①清除修改;②强制分支切换
方法①:清除未跟踪文件【推荐做法】
git clean -n //这个是清除文件预览 git clean -f //强制清除文件
效果:
D:\Android\***\*****>git clean -n Would rempve app/build.gradle D:\Android\***\*****>git clean -f Removing app/build.gradle
方法②:强制分支切换
git checkout -f <branch> // <branch>为要切换到的分支名,注意不带“<>”
D:\Android\***\*****>git clean -n Would rempve app/build.gradle D:\Android\***\*****>git clean -f Removing app/build.gradle
原因分析
git 的本地版本管理有三个部分:
名称 | 说明 |
工作区(Working Directory) | 直接编辑的文件部分 |
暂存区(Staged Snapshot) | 文件执行 git add . 后存的地方 |
版本库区(Commit History) | 文件执行 git commit . 后存的地方 |
三者之间的关系:
当我们执行 checkout 的时候,git会检查工作区是否存在未跟踪文件,也是上述出错的原因。