似乎在日志中丢失了git提交,reflog仍显示提交

时间:2012-06-20 16:13:54

标签: git

我有一个git项目,它只是本地的,只有一个master分支。昨天我做了一些提交。今天我做了一次提交。提交看起来很好 - 它是现有文件和一些新文件的差异。

然而,当我在gitx中查看我的主分支时,它只显示今天的提交,并使它看起来像我从头开始提交所有文件一次提交。

Git log显示相同的内容,但git reflog显示我之前的所有提交:

$ git log
 commit bd7d6af7f916706c5df6d57bed883d2c2d81f60f
 Author: Sam Fen
 Date:   Wed Jun 20 12:00:38 2012 -0400

  Add Genotype class, update naming

$ git reflog
 bd7d6af HEAD@{0}: checkout: moving from master to master
 bd7d6af HEAD@{1}: commit: Add Genotype class, update naming
 bf0d3dd HEAD@{2}: commit: Add start to genetics manipulation library
 2335bf2 HEAD@{3}: commit: Convert to CoffeeScript
 4c26713 HEAD@{4}: commit: Initial commit with basic structure, trivial Jasmine t

reflog显示了对于最后一个使用相同散列(bd7d6af)的奇怪的双重提交,但我认为这只是因为在我看到gitx中的空历史后,我回到了命令行并输入了'git checkout master'只是为了确保我是主人(我当时)。

有关可能发生的事情以及如何恢复历史的任何想法?

2 个答案:

答案 0 :(得分:0)

看起来bd7d6af认为这是初始提交

您可以尝试git reset bf0d3dd; git add -A; git commit,看看您是否得到了正确的提交。

答案 1 :(得分:0)

如果bf0d3dd是你昨天做的最后一次提交,你可以:

git checkout master
git rebase --onto bf0d3dd master

这会占用您当前的提交并重写它,以便bf0d3dd是其父级,有效地将您的主分支重新附加到历史记录。

不确定它是如何进入这种状态的 - 它有几种不同的方式,但我们必须了解更多你所经历过的确切事件。