首页 > 解决方案 > Git撤消推送的提交(错误地删除了文件夹),上面有其他提交

问题描述

好的,所以我错误地删除了一个文件夹并推送了该更改

然后我恢复了,然后committed again, and推了
我继续工作了2个月

现在我注意到,我所有的注释基本上都是“whops delete by wrong”

有没有办法只删除删除文件夹加上恢复删除,并保留其他所有内容?

我一个人工作,没有团队成员,不用担心检查或其他什么

标签: git

解决方案


由于您在这里是您的船的主人(正如您提到的允许历史重写),我建议在这里进行交互式变基*。(文档

在开始之前,由于这是一个棘手的操作,正如下面 Lasse Vågsæther Karlsen 所提醒的那样,强烈建议您备份您的分支git branch <backupBranch> <originalBranch>例如)。

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

然后与

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

(注意插入符号在删除提交之前从提交开始交互式变基)

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

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

现在更改pickdrop删除两个提交,然后关闭/保存编辑器。

并完成变基

git rebase --continue

(如果有任何事情发生,请在变git rebase --abort基开始之前使用它来恢复)

最后不要忘记,您git push -f <remote> <branch>下次需要更新旧的 ref,因为每次提交都会有所不同,仅由其父级的 ref 提交。


*(因为 2 个月后你可能有相当数量的提交,所以git reset --hard <deletionCommit>^ && git cherry-pick <nextGoodCommit-1> <nextGoodCommit-2> <nextGoodCommit-3>可能非常乏味,交互式 rebase 基本上可以自动完成)


推荐阅读