做git复位后恢复添加的文件 – 硬头^
我添加了一个新文件F1,并对另一个文件F2进行了更改,但是之后做了一个“git reset –hard HEAD ^”,并且我已经丢失了对这些文件的所有更改。
有没有办法,我可以让他们回来。
我在这里看到一个相关的问题: 我怎样才能撤销git reset –hard HEAD〜1? 但是,这个问题假设一个人做了一个git commit。
你可以(有些工作)在最后的“git add <file> ”中恢复文件的状态。 您可以使用
$ git fsck --cache --no-reflogs --lost-found --unreachable HEAD 然后检查“.git / lost-found / other”目录中的文件。
请阅读git fsck的手册页。
  (我假设缺less的文件不是任何提交的一部分,否则, git log --all -g --diff-filter=D --stat是你的朋友。) 
- 
获取 git知道文件名的不可到达文件列表:git fsck --unreachable --no-reflogs --no-cache HEAD | fgrep " tree " \ | cut -d " " -f3 | xargs -r -n1 git ls-tree \ | fgrep " blob " | cut -d " " -f 3- | sort -k2 -u
- 
如果你看到一些有趣的东西, git cat-file blob SHA-1-of-interesting-file会把git cat-file blob SHA-1-of-interesting-file输出到标准输出。 (例如:git cat-file blob b8f0bdf56 > recovered-logo.png)
不幸的是,如果丢失的文件不是任何提交的一部分,git没有时间戳,因此,您不能打印按时间sorting的各种版本的文件。
 如果丢失的文件从来没有上演过( git stage或git add )或者藏起来( git stash ),那么你就不是很幸运了,因为就git所知,文件从来就不存在。  (你仍然可以尝试做一个git fsck --no-reflogs --lost-found并且在目录.git/lost-found/other中查看是否有值得保留的东西,以防git确实有你的缺失副本一些幸运的事故文件,在这种情况下你没有文件名来帮助你,只有文件内容。) 
如果你只是失去了一些提交(而不是只是文件),你可能会想要运行这样的东西:
 gitk --all $( git fsck | awk '/dangling commit/ {print $3}'; git log -g --pretty='format:%H' ) 
 这将与所有的分支,所有的reflog和所有悬而未决的提交gitk 。 你可能想要添加-n 10000或者其他一些限制,以防你的repo有很多提交(比如linux内核)。 如果你没有gitk ,你可以使用命令行来运行较小的版本,如下所示: 
 git log --all --decorate --stat --graph --date-order $( git fsck | awk '/dangling commit/ {print $3}'; git log -g --pretty='format:%H' ) 
或者具有较less详细输出的版本
 git log --all --decorate --oneline --graph --date-order $( git fsck | awk '/dangling commit/ {print $3}'; git log -g --pretty='format:%H' ) 
实际上,如果你已经添加了对象到索引(通过使用git add),为对象的状态创build了一个blob,但是没有树(也就是commit)对象引用它。 这是如何得到一个“晃来晃去”的松散对象文件,如果你运行git fsck它会显示你未被引用的blob(git gc将删除这些types的对象,如果它运行的话)。
因此,您可以使用reflog(如果已启用)来尝试恢复已添加的文件F1的索引状态。 如果你还没有添加F2,那么就像Greg说的那样,git对它一无所知,而且你在那里运气不好。
试试http://gitready.com/advanced/2009/01/17/restoring-lost-commits.html
我因为失去的改变而心脏病发作。 但是在继这个post之后。 我得到了我的变化
 有一个开箱即用的git plugin : 
https://github.com/pendashteh/git-recover-index
 $ cd /path/to/disatered/repo $ git clone git@github.com:pendashteh/git-recover-index.git $HOME/.git-recover-index $ $HOME/.git-recover-index/git-recover-index.sh