【Git-error】Your local changes to the following files would be overwritten by checkout

问题描述

使用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会检查工作区是否存在未跟踪文件,也是上述出错的原因。

 

posted @ 2021-08-12 14:55  smile008  阅读(365)  评论(0编辑  收藏  举报