git - 文件已删除,更改意外恢复,没有恢复历史记录

时间:2012-01-03 18:29:59

标签: git version-control

我们的三个开发人员正在使用一个远程分支(具有相同名称的本地跟踪分支),并且在两次提交之间以某种方式〜还原了40个文件 - 但是没有这些文件被恢复的历史记录。我们根本无法理解这是怎么发生的。

以下是发生的事情的简化示例:

  • 开发人员Joe将“System.out.println(”Hello“)添加到HelloWorld.java,在本地提交并将其更改推送到此远程分支。

  • 远程分支上发生了几次其他提交(未触及HelloWorld.java)

  • 开发人员Jane将“System.out.println(”World“)添加到HelloWorld.java,在本地提交并将其更改推送到此远程分支

  • 远程分支上发生了几次其他提交(未触及HelloWorld.java)

如果您查看此文件的完整日志,您将看到:

  • Jane,已添加世界,下午3:00
  • Joe,你好,2:00 PM

所以你希望这个文件的当前状态是:

 System.out.println("Hello")
 System.out.println("World")

当然,你可以在提交之间进行差异并看到:

 System.out.println("Hello")
+ System.out.println("World")

没有进一步的变化。但实际上,目前的状态是:

 System.out.println("Hello")

我们的情况更复杂。除了修改之外,我们还添加了文件,重命名文件等。所有这些更改都被还原:添加的文件被删除,重命名的文件被重命名为原始名称等。但是,没有任何开发人员推送任何恢复这些更改的提交文件。

我们也只使用基本的pull + push命令,因为我们的更改都是相互隔离的,所有automerged完全没问题。我们没有像rebase,cherry pick等那样做任何想法。

Github有一个功能“查看这两个提交之间的比较”,这实际上是恢复这些更改的唯一证据。

我正在寻找可以运行的任何git命令,这将有助于进一步调试。我们真的不确定如何继续。

谢谢

2 个答案:

答案 0 :(得分:0)

确保更改发生在同一分支上。提交差异可以显示差异,但它们可能位于不同的分支上。

在Joe的提交和最新提交之间使用git bisect并检查HelloWorld.java以查看每个二等分点是否存在该行。

答案 1 :(得分:0)

我们挑选了三个丢失的提交,然后将它们重新应用到当前的头部。我们仍无法解释这是怎么发生的。有点可怕。但它不再是一个问题。