![](/img/trans.png)
[英]How to undo multiple commits in git that have been pushed to a remote server?
[英]Git undo pushed commits (deleted folder by mistake) that have other commits on top
好的,所以我误删除了一个文件夹并推送了更改
然后,我还原并committed again, and
推送
然后我继续工作了两个月
现在我注意到,我的所有注释基本上都读为“谁误删除了”
有没有一种方法可以删除仅删除文件夹加上删除的还原,并保留其他所有内容?
我一个人工作,没有团队成员,不用担心结帐或其他任何事情
有没有一种方法可以删除仅删除文件夹加上删除的还原,并保留其他所有内容?
不清楚您的意思是“仅删除删除文件夹”
恢复删除
# 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
现在改变pick
到drop
的两次提交下降,并关闭/保存编辑器。
并完成变基
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.