2012-01-03 105 views
0

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

这里发生了什么简单的例子:

  • 开发者乔补充道“的System.out.println(”你好“)到HelloWorld.java,当地承诺,并推动他改变这种远程分支。发生在远程分支(不接触HelloWorld.java)

  • 其他几个提交

  • 开发珍加“的System.out.println(”世界“)到HelloWorld.java,本地提交和推她改变这远程胸罩NCH

  • 其他几个提交发生在远程分支(不接触HelloWorld.java)

如果您检查完整的日志文件,你会看到:

  • 简,加世界,3:00 PM
  • 乔,新增你好,2:00 PM

所以,你所期望的该文件的当前状态为:

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

果然你可以做的提交之间的差异,看看:

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

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

System.out.println("Hello") 

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

我们也只使用了基本的拉+推命令,因为我们所做的更改都是相互隔离的,所有的自动调整都非常好。我们没有做任何像rebase,樱桃选择等花式。

Github有一个功能“查看这两个提交之间的比较”,这基本上是唯一的证据表明这些更改已被还原。

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

谢谢

+0

你确定开发者在同一个分支上工作吗?也许这些更改可以在另一个分支上找到。 (没有人做过强制/非快速推进(这会删除历史记录)?) – knittl 2012-01-03 18:34:01

+0

所有开发人员都在同一分支上工作。我检查了所有其他分支(我们只有一对),并没有发现那些变化。 – nogridbag 2012-01-03 18:53:00

回答

0

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

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

+0

我这样做了,但它并没有提供任何新的信息。它在一个提交中并且在另一个提交中去了。我们只有几个提交(四个或五个),所以我可以基本检查每个提交。在这四个或五个提交中,没有一个显示所做的更改已恢复。 – nogridbag 2012-01-03 19:21:46

+0

看着git树,在“好”路径中,变化就在那里。另一条路径与“好”路径合并成为最新的头,但“好”路径的变化简直失去了。 – nogridbag 2012-01-03 19:29:02

0

我们樱桃选择了三个丢失的承诺,并将其重新应用于当前头部。我们仍然无法解释这是怎么发生的。有点可怕。但它不再是一个问题。