2016-02-19 37 views
1

我的一位同事通過複製樹,刪除.git目錄並執行新的git init,以「錯誤」的方式創建了一個新的git存儲庫。然後,同事大大減少了存儲庫,刪除了一堆文件並重命名了其他文件(在提交任何內容之前)。是否有可能將git歷史記錄還原到複製和修改的樹上?

在我看來,它應該有可能通過從原始回購區域到新區域的差異來修復歷史記錄,然後進行修補。

我能夠使用

diff -ur old new --exclude=".git" > master.patch 

然後我差點就做

git clone old new_old 
cd new_old 
git checkout master 
patch -p 1 < ../master.patch 

# Then, if the patch command had worked, I would have done: 
cd .. 
rm -rf new 
mv new_old new 

修補(-p 1告訴它砍掉庫目錄名)來產生這樣的差異,但它似乎遇到了完全刪除文件的問題。

我希望它也會遇到已重命名的文件(例如,從old_dog.hppnew_dog.hpp)的問題。但我也讀過git

我確定其他人已經做到了這一點,但我找不到任何例子。有沒有一種簡單的方法來恢復此存儲庫中的文件的歷史記錄,或者我只是在浪費時間?

回答

1

實際上它簡單得多。

使用舊的.git目錄,刪除所有文件並將其替換爲新根提交中的所有文件。

然後,如果有對新的根頂部的任何提交提交,使用git format-patch產生一系列的補丁和git am應用它們。 (你可以改爲執行rebase,但對於這種情況IMO來說這是不必要的複雜)

+0

哇!那太簡單了!謝謝一堆。 –

相關問題