【问题标题】:Is it possible to restore a git history to a copied and modified tree?是否可以将 git 历史记录恢复到复制和修改的树中?
【发布时间】:2016-02-19 21:42:57
【问题描述】:

我的一位同事以“错误”的方式创建了一个新的 git 存储库,方法是复制树、删除 .git 目录并创建一个新的 git init。然后,这位同事显着精简了存储库,删除了一堆文件并重命名了其他文件(在提交任何内容之前)。

在我看来,应该可以通过从原始存储库到新存储库进行差异来恢复历史记录,然后进行修补。

我能够使用

生成这样的差异
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

我确定其他人以前也这样做过,但我找不到任何示例。有没有一种简单的方法可以恢复此存储库中文件的历史记录,还是我只是在浪费时间?

【问题讨论】:

    标签: git diff patch


    【解决方案1】:

    实际上要简单得多。

    使用旧的.git 目录,删除所有文件并用新根提交中的所有文件替换它们。

    然后,如果在新的根提交之上还有任何其他提交,请使用git format-patch 生成一系列补丁并使用git am 应用它们。 (您可以改为执行变基,但对于这种情况 IMO 来说这是不必要的复杂)

    【讨论】:

    • 哇!那太简单了!非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 2015-06-04
    相关资源
    最近更新 更多