解决 git checkout a 出现的问题

Posted by Puqin Chen on 2018-08-15

解决 git checkout a 出现的问题

解决方案

今天,提交代码需要合并分支的时候,当在终端输入git checkout master 命令时,却报了如下错误:

1
2
3
4
error: Your local changes to the following files would be overwritten by checkout:
Assistant.xcworkspace/xcuserdata/chen.xcuserdatad/UserInterfaceState.xcuserstate
Please commit your changes or stash them before you switch branches.
Aborting

错误翻译过来就是,当前分支有未跟踪的文件,checkout 命令会覆盖它们,请缓存( stash )或者提交( commit )。
所以,针对错误提示,我们选择缓存或者提交两种方法来解决这个问题。

  • stash 暂存到缓存区
1
2
3
4
git add .  
git stash // 把当前分支所有没有 commit 的代码先暂存起来,然后进行分支的切换
// 当你又需要之前的代码时,我们可以使用以下命令
git stash pop // pop 会帮你把代码还原,还自动帮你 把这条 stash 记录删除
  • commit 发起一个 commit,存到提交历史
1
2
git add .
git commit -m "xxxxx" // 这个命令比较简单,就是提交信息

以上这两种方法就是针对你未跟踪文件的内容改动很重要,需要保存修改的情况。

如果说,我们之前的改动不重要,我们可以放弃修改,这时候,我们可以清除未跟踪的文件。

1
2
git clean n  //这个是清除文件预览
git clean -f //强制清除文件

或者使用 git checkout -f <branch> 强制切换分支。(但是大多数情况下,我们还是不要这样操作)

原因分析

git 的本地版本管理有三个部分:

名称 说明
工作区(Working Directory) 直接编辑的文件部分
暂存区(Staged Snapshot) 文件执行 git add . 后存的地方
工作区(Working Directory) 文件执行 git commit . 后存的地方

它们三者之间的关系:
PRU08P.png
当我们执行 checkout 操作的时候, git 会检查工作区是否存在未跟踪文件。当我们的工作区存在未跟踪的文件时,执行 checkout 的时候会出现错误提示。