找回git svn rebase中因冲突而丢失的文件

今天碰到了一个关于Git的问题,Git Community Book 中文版的译者liuhui998帮忙解决了,感谢!记录如下:

Q:

我发现丢失了一个重要的文件,执行步骤如下:

  1. mvc/view/Fight.as移动到了mvc/Fight.as,做了大量的修改,做了一次提交;
  2. 使用git svn rebase,此时git提示mvc/view/Fight.as冲突;
  3. 执行git rm mvc/view/Fight.as移除了这个文件;
  4. 执行git rebase --continue,rebase成功;
  5. 执行git svn dcommit提交到svn。

但我随后发现mvc/Fight.as不见了,在历史记录中,也只能找到mvc/view/Fight.as的内容。

请问:还能找回我修改过的mvc/Fight.as么?

A:

试一下git fsck --lost-found,可以找到很多dangling commit。

再用git cat-file -p看一下每个commit里面有没有删掉的内容(只看commit即可)

如果有你要想的commit,再执行git rebase 'commit-name'。