【转载】当git仓库checkout出现文件消失的处理方法
原文地址:当git仓库checkout出现文件消失的处理方法,作者:Tekkaman Ninja
今天复制了一个Linux内核的git仓库,直接将.git文件夹放在了一个文件夹中,然后执行了git checkout ***, 检出了一个tag中的代码快照。但是怪事发生了,出现了一大堆类似“D usr/Makefile”。让后我看了下工作目录,里面只有几个文件夹,也就是只检出了一部分文件。这时我用“git status”一看,出现一堆类似“# deleted: usr/Makefile”的信息:
# On branch ****** # Changes not staged for commit: # (use "git add/rm ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # deleted: usr/Makefile ...... # no changes added to commit (use "git add" and/or "git commit -a")
从这些情况上来看,当前应该类似“checkout后又人为删除了一大堆文件,并没有暂存一样”,但是为什么会这样,暂时搞不明白。这种情况我的一个同事也遇到过,当时以为是他拷贝的仓库有问题,或者文件系统的问题,没有仔细弄。现在有碰到这个问题,看来就不能这么解释了,首先仓库是我用tar打包的,并且来源都是EXT3文件系统。原因搞不明白,但是可以解决这个问题。有两种方法(命令)可以解决:
1、使用reset命令
git reset --hard
运行结果类似:
tekkaman@Super-MAGI:~/development/Ti/linux-omap3$ git reset --hard Checking out files: 100% (35462/35462), done. HEAD is now at ****
这么一来所有文件都出来了。
对于这条命令的解释就是:
--hard Resets the index and working tree. Any changes to tracked files in the working tree since are discarded. 复位暂存文件和工作目录树。工作目录树中任何已跟踪文件从上个点的改变都会被丢弃。
2、使用stash命令
git stash
这么一来所有文件都出来了,之后你再删除这个stash就好了。这个方法比较蹩脚,但是It works!