Chinaunix首页 | 论坛 | 博客
  • 博客访问: 805257
  • 博文数量: 106
  • 博客积分: 1250
  • 博客等级: 少尉
  • 技术积分: 1349
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-09 09:38
文章分类

全部博文(106)

文章存档

2014年(1)

2013年(13)

2012年(92)

分类:

2012-10-20 16:23:02

     今天复制了一个Linux内核的git仓库,直接将.git文件夹放在了一个文件夹中,然后执行了git checkout ***, 检出了一个tag中的代码快照。但是怪事发生了,出现了一大堆类似“D    usr/Makefile”。让后我看了下工作目录,里面只有几个文件夹,也就是只检出了一部分文件。这时我用“git status”一看,出现一堆类似“# deleted:    usr/Makefile”的信息:
  1. # On branch ******
  2. # Changes not staged for commit:
  3. # (use "git add/rm ..." to update what will be committed)
  4. # (use "git checkout -- ..." to discard changes in working directory)
  5. #
  6. # deleted: usr/Makefile
  7. ......
  8. #
  9. no changes added to commit (use "git add" and/or "git commit -a")
从这些情况上来看,当前应该类似“checkout后又人为删除了一大堆文件,并没有暂存一样”,但是为什么会这样,暂时搞不明白。这种情况我的一个同事也遇到过,当时以为是他拷贝的仓库有问题,或者文件系统的问题,没有仔细弄。现在有碰到这个问题,看来就不能这么解释了,首先仓库是我用tar打包的,并且来源都是EXT3文件系统。原因搞不明白,但是可以解决这个问题。有两种方法(命令)可以解决:

1、使用reset命令
  1. git reset --hard
运行结果类似:
  1. tekkaman@Super-MAGI:~/development/Ti/linux-omap3$ git reset --hard
  2. Checking out files: 100% (35462/35462), done.
  3. HEAD is now at ****
这么一来所有文件都出来了。
对于这条命令的解释就是:
  1. --hard
  2. Resets the index and working tree. Any changes to tracked files in the working tree since are discarded.
  3. 复位暂存文件和工作目录树。工作目录树中任何已跟踪文件从上个点的改变都会被丢弃。
2、使用stash命令
  1. git stash
这么一来所有文件都出来了,之后你再删除这个stash就好了。这个方法比较蹩脚,但是It works!
阅读(4858) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~