今天复制了一个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命令
运行结果类似:
- 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命令
这么一来所有文件都出来了,之后你再删除这个stash就好了。这个方法比较蹩脚,但是It works!
阅读(656) | 评论(0) | 转发(0) |