2012-01-03 33 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

我們櫻桃選擇了三個丟失的承諾,並將其重新應用於當前頭部。我們仍然無法解釋這是怎麼發生的。有點可怕。但它不再是一個問題。