Git undo推送的提交(错误地删除了文件夹)中的其他提交

时间:2019-02-27 23:04:48

标签: git

好,所以我误删除了一个文件夹,然后推送了更改

然后我回复了原位,并committed again, and按下了
然后我继续工作了两个月

现在我注意到,我的所有注释基本上都读为“谁误删除了”

有没有一种方法可以只删除删除文件夹以及删除的还原,并保留其他所有内容?

我自己一个人工作,没有团队成员,也不必担心退房等问题

2 个答案:

答案 0 :(得分:1)

  

有没有一种方法可以只删除删除文件夹以及删除的还原,并保留其他所有内容?

  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>

答案 1 :(得分:1)

由于您是此处的船长(如您所述,可以重写历史记录),因此我建议在此处交互式重新部署 *。 (doc

在开始之前,由于这是一项棘手的操作,正如LasseVågsætherKarlsen right below所提醒的那样,强烈建议您备份分支(使用git branch <backupBranch> <originalBranch>例如)。

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

然后使用

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

现在将pick更改为drop,以删除两个提交,然后关闭/保存编辑器。

并使用

完成变基
git rebase --continue

(如果有任何遗漏,请在重新开始基准测试之前使用git rebase --abort还原内容)

最后,不要忘了下次您需要git push -f <remote> <branch>来更新旧的引用,因为该行中的每次提交都会有所不同,因为仅由其父母的引用会有所不同


*(因为2个月后,您提交的次数可能很多,所以git reset --hard <deletionCommit>^ && git cherry-pick <nextGoodCommit-1> <nextGoodCommit-2> <nextGoodCommit-3>可能非常繁琐,而交互式rebase基本上可以做到这一点)