繁体   English   中英

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

[英]Git undo pushed commits (deleted folder by mistake) that have other commits on top

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

然后,我还原并committed again, and推送
然后我继续工作了两个月

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

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

我一个人工作,没有团队成员,不用担心结帐或其他任何事情

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

  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>

由于您是这里的船长(如您所述,允许进行历史重写),所以我建议在此处进行交互式变基 *。 doc

并且在开始之前, 由于这是一个棘手的操作,正如下面的 LasseVågsætherKarlsen所提醒的那样 ,强烈建议您备份分支 (例如,使用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

现在改变pickdrop的两次提交下降,并关闭/保存编辑器。

并完成变基

git rebase --continue

(如果有任何问题,请在重新开始git rebase --abort之前使用git rebase --abort还原内容)

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


*(因为两个月后,您可能会有相当数量的提交,所以git reset --hard <deletionCommit>^ && git cherry-pick <nextGoodCommit-1> <nextGoodCommit-2> <nextGoodCommit-3>可能非常繁琐,和交互式变基基本上可以实现自动化)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM