代码之家  ›  专栏  ›  技术社区  ›  Toskan

被其他Git错误地推到顶层的Git提交(undo)

git
  •  0
  • Toskan  · 技术社区  · 6 年前

    好吧,所以我错误地删除了一个文件夹,并按下了更改

    然后我又回去了 committed again, and
    然后我继续工作了两个月

    现在我注意到,我所有的注释基本上都是“whops误删除”

    我一个人工作,没有团队成员,也不担心检查出来什么的

    1 回复  |  直到 6 年前
        1
  •  1
  •   blue112    6 年前

    1. 不清楚“只删除删除文件夹”是什么意思

    2. 恢复删除

      # Undo any change based upon the commit SHA1 (or multiple)
      git revert SHA-1 SHA-2 ...  SHA-N
      

    如何为文件的最后一次提交提供资金

    git log -n 1 -- <file path>
    

    现在使用这个SHA签出所需的内容

    git checkout <SHA-1> -- <path>
    
        2
  •  1
  •   Romain Valeri    6 年前

    既然你是你船的船长(正如你提到的,历史可以重写),我建议你 这里*。( doc )

    在开始之前, 因为这是一个敏感的操作,正如Lasse Vgsther Karlsen所提醒的那样 right below (与 git branch <backupBranch> <originalBranch> 例如)。

    首先搜索两个提交的SHA-1哈希(删除和取消删除) git log . (我假设您可以这样做,但如果需要,可以随时询问该部分的详细信息。)

    git checkout <yourBranch>
    git rebase -i <deletionCommit>^
    

    (注意插入符号从commit开始交互式重基

    您将得到一个打开的编辑器,其中包含从指定点到头部的提交列表,前面有一个关键字:

    pick 295ea4a Some commit message
    pick 9cb2b54 Some other commit message
    pick fe91df1 Yet another commit message
    

    现在就换 pick drop 对于这两个提交,关闭/保存编辑器。

    然后用

    git rebase --continue
    

    (如果有任何东西偏离了方向,使用 git rebase --abort 在重新对位之前恢复)

    最后别忘了你需要 git push -f <remote> <branch> 下一次更新旧的ref时,因为每一次提交都是不同的,可以只由其父级的ref执行。


    *(因为两个月后你可能会有相当数量的犯罪,所以 git reset --hard <deletionCommit>^ && git cherry-pick <nextGoodCommit-1> <nextGoodCommit-2> <nextGoodCommit-3>