首页 > 技术文章 > 【转载】当git仓库checkout出现文件消失的处理方法

haig 2017-02-15 09:23 原文

原文地址:当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!

推荐阅读