You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

误强制推送覆盖Github网页端修改,如何恢复线上更改?

别慌,这种情况我碰到过好几次,GitHub其实偷偷保留了那些被你强制推送覆盖的提交,咱们一步步把网页端的修改找回来:

第一步:定位被覆盖的网页端提交ID
  • 打开你的GitHub仓库主页,点击顶部的「Insights」选项卡
  • 在左侧菜单栏里找到「Network」,这里会展示仓库所有曾经存在过的提交记录——哪怕是被强制推送覆盖的也能找到
  • 你可以通过提交时间(网页端修改的时间应该和服务器推送的时间有差异)或者提交描述来定位那次网页端修改的提交,找到后点击提交旁边的复制图标,把那串40位的哈希提交ID复制下来
第二步:本地恢复后推送(适合习惯本地操作的情况)

如果你想先在本地确认修改内容再推回远端:

  1. 打开本地仓库的终端,先拉取远端最新状态:git fetch origin
  2. 创建一个临时分支来恢复目标提交:git checkout -b recover-web-edits <刚才复制的提交ID>
  3. 这时候你就能看到网页端的所有修改了,确认没问题后,切回主分支(比如main或者master):git checkout main
  4. 把临时分支的内容合并到主分支:git merge recover-web-edits
  5. 最后强制推送到GitHub(这次一定要确认是正确的提交):git push -f origin main
第三步:直接在GitHub网页端恢复(不用折腾本地)

如果不想碰本地终端,完全可以在GitHub网页上搞定:

  • 回到刚才找到的那个网页端提交详情页,点击页面顶部的「Browse files」按钮,进入该提交的文件状态页面
  • 点击页面右上角的「Code」按钮,选择「Create new branch」,给新分支起个好记的名字(比如restore-web-changes),然后点击「Create branch」
  • 现在这个新分支就完整保留了网页端的修改,接下来你可以去仓库的「Pull requests」页面,创建一个PR把这个新分支合并回主分支,合并完成后主分支就恢复到网页端修改的状态了
小提醒

以后再用git push -f之前一定要谨慎!不确定本地和远端的差异时,先跑git fetch然后用git diff origin/main main(假设主分支是main)看看两边的区别,避免再次踩覆盖提交的坑。

内容的提问来源于stack exchange,提问作者lufc

火山引擎 最新活动