git - Git撤消推送的提交(错误地删除了文件夹),上面有其他提交
问题描述
好的,所以我错误地删除了一个文件夹并推送了该更改
然后我恢复了,然后committed again, and
推了
我继续工作了2个月
现在我注意到,我所有的注释基本上都是“whops delete by wrong”
有没有办法只删除删除文件夹加上恢复删除,并保留其他所有内容?
我一个人工作,没有团队成员,不用担心检查或其他什么
解决方案
由于您在这里是您的船的主人(正如您提到的允许历史重写),我建议在这里进行交互式变基*。(文档)
在开始之前,由于这是一个棘手的操作,正如下面 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
现在更改pick
为drop
删除两个提交,然后关闭/保存编辑器。
并完成变基
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 基本上可以自动完成)
推荐阅读
- python - scRNA-seq:如何使用预先计算的 PCA 分数/负载来使用 TSNE python 实现?
- java - java.lang.IllegalStateException:在 android.os.Parcel.readException
- html - css中有没有办法让一个div漂浮在另一个div上但向下滚动时不漂浮
- javascript - Discord js bot connection.play() 不会播放音频文件
- docker - 如何从 docker 网络确定 uvicorn 服务器的 forwarded-allow-ips
- angularjs - Angular 的条件类和静态类
- ios - 尝试设置 Stripe 集成代码时出现 EXC_BAD_ACCESS 错误
- babeljs - @babel/plugin-transform-runtime 允许在 cjs 文件中导入 esm
- python - 将列表元素与元组元素合并
- time-complexity - 用 Big Theta 表示法表示具有不同 O 和 Omega 复杂度的算法