【问题标题】:How to restore a whole directory from history of git repository?如何从 git 存储库的历史记录中恢复整个目录?
【发布时间】:2012-03-29 01:40:07
【问题描述】:

我想从我的 git 存储库的历史记录中恢复整个目录(递归)。

只有 1 个分支(master)。

我知道包含错误的提交。

我可以使用父提交的 sha1 哈希将目录的状态恢复到包含错误之前的状态吗?

我想过这样的事情:

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 path/to/the/folder/

但它不起作用。

【问题讨论】:

  • 尝试在修订和路径之间添加'--':git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/
  • 这有帮助。非常感谢。
  • @CarlosCampderrós 把它写成一个真正的答案,并在别人这样做之前收集你的 15 分;)
  • @MagnusSkog 我不确定这是否可行,所以我发表评论只是为了检查。现在我确定它有效,我已经把它写下来作为答案:)
  • 作为一般提示,“它不起作用”不是很有用。告诉我们为什么它不起作用,理想情况下是错误输出(如果它很长,则修剪)。

标签: git


【解决方案1】:

尝试在修订和路径之间添加“--”:

git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/ 

而如果你想从之前的commit中恢复一个目录,你可以将commit hash替换为HEAD~1,例如:

git checkout HEAD~1 -- path/to/the/folder/ 

【讨论】:

  • 相同的命令,几乎不同的目的:stackoverflow.com/questions/953481/…
  • 但是有一个问题:OP 没有指定目录是否仍然存在。要将现有目录恢复到提交状态,应首先删除目录的内容。在其他情况下,不会删除旧提交中不存在的现有文件。
  • +1 @Alberto 绝对同意。我做了rm -Rf path/to/the/folder 然后git checkout 348ce0aa02d3738e55ac9085080028b548e3d8d3 -- path/to/the/folder/ - 结果:该路径与该提交中的文件完全相同,没有差异,也没有在此提交之后创建的额外文件。这就是我想要的。
  • -- 是做什么的?
  • @RayFoss 它告诉 git 以下参数是文件(否则它们可能与提交哈希、分支或其他内容混淆)。通常不需要它们,但放置它们并没有什么坏处
【解决方案2】:

有两种简单的方法可以做到这一点:

如果包含错误的提交包含错误,请使用git revert 来反转它的效果。

如果没有,简单的方法是这样的:

  1. git checkout 348…
  2. cp -a path/to/the/folder ../tmp-restore-folder
  3. git checkout HEAD # or whatever
  4. rm -rf path/to/the/folder
  5. mv ../tmp-restore-folder path/to/the/folder
  6. git add path/to/the/folder
  7. git commit -m "revert …"

【讨论】:

    【解决方案3】:

    如果您只是简单地执行git checkout <SHA-ID>,那么它会暂时将您移至该 sha-commit。

    每个提交对象都保存了当时磁盘的整个结构,所以如果你有文件需要复制出来,你可以这样做。但是警告,您不会在任何分支中,因此您必须先移回 master,然后再将文件复制到工作树并提交。

    【讨论】:

    • 重新“搬回master”你的意思是checkout master?
    【解决方案4】:
    git checkout -- path/to/folder/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-29
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多