2016-02-19 17 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

哇!那太简单了!谢谢一堆。 –

相关问题