Git 无法切换分支,报错git did not exit cleanly

Git 无法切换分支,报错git did not exit cleanly

今天从做内存泄漏测试需要切换Git分支,checkout 的时候发现报错git did not exit cleanly。
解决完问题后,整理了一下git的相关操作。希望对大家有帮助。

一、Git的基本操作

首先简单介绍一下Git的一些基本操作系统。由于Git是目前最流行的版本管理系统,学会Git几乎成了开发者的必备技能。

  1. git commit 提交文件到本地版本库
  2. git pull 拉取远程分支并合并到本地分支
  3. git push 提交到远程仓库
  4. git checkout 切换分支

二、关于Git的那些事情

首先在此之前,我对stash save很不理解,不知道这是干嘛用的,但是平时又经常会用到就上网查了一下。
对于用法最常用的就是stash当前修改。
这个命令会所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。
需要说明一点,stash是本地的,不会通过git push命令上传到git server上。
实际应用中推荐给每个stash加一个message,用于记录版本,使用git stash save取代git stash命令。
剩下的关于stash的操作暂时用不到,所以这里不提,大家可以参考博客https://www.cnblogs.com/tocy/p/git-stash-reference.html,里面写的很详细。感谢这位大佬。

继续描述我的问题。由于在checkout(就是切换分支的时候遇到报错),所以先fetch Rebase一下,点Rebase。pull一下(如果pull几次都不好用,就stash save)。然后显示git did not cleanly,不知道是不是因为刚刚fetch Rebase了一下。

上网查了一下stash push not clean。在git命令端输入git stash clear,但是好像没有反应。再次点击stash changes,显示如下图。
Git 无法切换分支,报错git did not exit cleanly
很疑惑为什么标红的这句是stash push而不是stash save。
又百度了一下stash save not clean ,查到了git重置初始状态的两种方式:clean和stash。像我这样的菜鸡当然不敢用。然后就把我们部门的大佬找来了。。

然后大佬看了一下我代码红的地方,发现不知道为什么一堆红的,我也是醉了。第一种方法把红的删掉。测试环境没有任何需要保存的东西,先删掉然后pull。pull没问题,但是问题并没有解决。
所以只能revert了发现有很多东西有revert,但是并不知道原因,有知道的大佬们可以在评论告诉我一下么。。
接着往下说我的故事,revert完成后,先看了一下log,显示并没有提交过什么东西,再切换分支还是不行,重启了一下还是不行,最后!试了使用界面tortoise git clean 是clean 不干净的。。。艾玛。。。
好在最后终于解决了!

三、总结

  1. 在开发机上提交代码的时候,尽量不要pull,否则很麻烦。(我已经麻烦大佬帮我撤回两次了,真的很麻烦),直接commit—>fetch Rebase最后push就可以了。

  2. 在测试机上,不要commit和push就是下图这两个按钮。因为你没有要提交的东西,点这两个按钮会把环境污染。Git 无法切换分支,报错git did not exit cleanly

  3. 前面git进程锁死的问题是因为 .git 文件夹下有个_lock文件锁住了,删了这个文件就好了

  4. untracked files clean问题,我试了使用界面tortoise git clean 是clean 不干净的,要用git bash里面 输入命令 git clean -d -f 删除

四、参考文献

https://www.cnblogs.com/tocy/p/git-stash-reference.html