git - 我使用 SHA 在远程分支上推送了一个提交,该 SHA 删除了 7 个过去的提交
问题描述
我使用此命令git push -f https://github.com/userid/reponame.git <commit-sha>:<branch-name>
在远程推送提交。但是,这删除了该分支的 7 个先前提交。
有什么方法可以恢复这些提交或撤消此更改?谢谢。
编辑:我使用的 SHA 是一个合并的提交,在我推送之前我没有获取那个分支。
解决方案
如果您推送到的服务器没有启用 reflogs(这是大多数服务器的通常默认设置),那么这些提交将从服务器中消失,至少就 Git 本身而言。(服务器可能有备份,这些备份可能有某种形式的提交,但是否如此以及如何恢复它们超出了这个社区的范围:-)——你需要serverfault.com。)
请注意,如果您可以登录到服务器,您可以幸运地检查服务器是否有 reflogs,或者git gc
还没有实际删除提交。这两种情况都不太可能,但并非不可能(尤其是在使用“隔离区”进行传入提交的较新 Git 版本中,这样做部分是为了避免git gc
在每次收到上传后立即运行)。
如果您没有将git fetch
这些提交编辑到您自己的存储库中,因此它们从未存在于您自己的存储库中,那么这些提交将继续不存在于您自己的存储库中。它们无法从它们从未存在过的地方恢复。
这只剩下一个地方可以查看,尽管它是一个很大的地方:所有其他曾经git fetch
从服务器执行过操作的计算机。 您可能会很幸运,发现其中一台机器具有提交。如果是这样,您可以从该机器检索提交。
如果没有,提交将永远消失。
推荐阅读
- laravel - 模块构建失败,Laravel 6 项目
- r - 在 R 上安装 rms 包时出错
- flutter - 如何在颤动中为布局元素设置背景颜色
- css - 我应该为详细列表(表格)使用 CSS 网格布局吗?
- javascript - 将状态从 localstate 移动到 globalstate 后,所有按钮都会立即单击。如何解决?
- javascript - 是否有任何解决方案可以显示从弹出窗口到选择字段的选定记录
- javascript - 如何在 JavaScript 中访问 HTML INPUT?
- macos - 在 MacOS 中从 C 调用 BLAS
- python - 从字典运行 GPIO 命令
- sql-server - 自动转义传递给 sqlcmd 的参数值的特殊字符