首页 > 其他分享 >git push -f强制冲掉了Github的远程仓库怎么恢复?

git push -f强制冲掉了Github的远程仓库怎么恢复?

时间:2023-12-20 23:04:31浏览次数:34  
标签:Github NAME id github git https push com YOUR

git push -f强制冲掉了Github的远程仓库怎么恢复?

背景

看到有很多教程说,可以本地仓库回退到之前的 commit,恢复 GitHub 的 remote 仓库的,但是我遇到的情况是,我本地这个仓库是新建的,只有一次 commit 记录,我是直接 push -f 把 remote 的仓库全冲了。。。本地根本没法恢复。

于是在网上搜索,只找到两篇相关的文章,参考这个老哥的:

https://www.boris1993.com/rescuing-my-github-repo-from-force-push.html

这个老师是参考的这个老哥:https://gist.github.com/agarwalparas/d355a950148702cc7ba82abc4d1943bf

我按照第二个老哥的方法去试,又按照 github 的官方 doc 修改 API 的参数,但是还是不行

file 下面总结一下怎么恢复

找到当时的 commit 的信息

首先,要通过 https://api.github.com/repos/:owner/:repo/events 这个 API 找到上次提交的 sha。

[
  {
    "id": "34280684189",
    "type": "PushEvent",
    "actor": {
      "id": 61727602,
      "login": "YOUR_NAME",
      "display_login": "YOUR_NAME",
      "gravatar_id": "",
      "url": "https://api.github.com/users/YOUR_NAME",
      "avatar_url": "https://avatars.githubusercontent.com/u/61727602?"
    },
    "repo": {
      "id": 693138740,
      "name": "YOUR_NAME/YOUR_NAME.github.io",
      "url": "https://api.github.com/repos/YOUR_NAME/YOUR_NAME.github.io"
    },
    "payload": {
      "repository_id": 693138740,
      "push_id": 16338237949,
      "size": 1,
      "distinct_size": 1,
      "ref": "refs/heads/master",
      "head": "19709fd69b846679a57edd1c0ee8ae0f199302b3",
      "before": "d3e142177d33de137566956bd8758b2ee77eaff2",
      "commits": [
        {
          "sha": "19709fd69b846679a57edd1c0ee8ae0f199302b3",
          "author": {
            "email": "[email protected]",
            "name": "YOUR_NAME"
          },
          "message": "doc: add new file",
          "distinct": true,
          "url": "https://api.github.com/repos/YOUR_NAME/YOUR_NAME.github.io/commits/19709fd69b846679a57edd1c0ee8ae0f199302b3"
        }
      ]
    },
    "public": true,
    "created_at": "2023-12-19T13:32:35Z"
  },
  {
    "id": "31933061999",
    "type": "PushEvent",
    "actor": {
      "id": 61727602,
      "login": "YOUR_NAME",
      "display_login": "YOUR_NAME",
      "gravatar_id": "",
      "url": "https://api.github.com/users/YOUR_NAME",
      "avatar_url": "https://avatars.githubusercontent.com/u/61727602?"
    },
    "repo": {
      "id": 693138740,
      "name": "YOUR_NAME/YOUR_NAME.github.io",
      "url": "https://api.github.com/repos/YOUR_NAME/YOUR_NAME.github.io"
    },
    "payload": {
      "repository_id": 693138740,
      "push_id": 15094516915,
      "size": 1,
      "distinct_size": 1,
      "ref": "refs/heads/master",
      "head": "d3e142177d33de137566956bd8758b2ee77eaff2",
      "before": "5270d691926a0919dfedb107e5f49716ec04055b",
      "commits": [
        {
          "sha": "d3e142177d33de137566956bd8758b2ee77eaff2",
          "author": {
            "email": "[email protected]",
            "name": "YOUR_NAME"
          },
          "message": "add a test file",
          "distinct": true,
          "url": "https://api.github.com/repos/YOUR_NAME/YOUR_NAME.github.io/commits/d3e142177d33de137566956bd8758b2ee77eaff2"
        }
      ]
    },
    "public": true,
    "created_at": "2023-09-19T08:43:27Z"
  }
]

可以看到,我这边只有两次提交记录,最上面的是最新一次的,冲掉了下面的 commit。

因此,我要恢复到的那个 commit 是:d3e142177d33de137566956bd8758b2ee77eaff2。

直接找到当时那个 commit 对应的 push 信息,访问下面这个 URL。

file

找到 commit 信息里的 html_url

得到的数据很长,但是我们找到关键信息:

"html_url": "https://github.com/YOUR_NAME/YOUR_NAME.github.io/commit/d3e142177d33de137566956bd8758b2ee77eaff2"

file 直接访问这个 URL,找到当时的 commit 记录:

file

找到当时的仓库所有文件的快照

点击右边的 Browse files,Browse the repository at this point in the history。直接找到了当时的仓库快照:

file 下载当时的代码:

file 这下就都找回来了!

其实主要还是 Github 存储了所有的 commit 信息,因此,就算是我们本地有丢失,通过访问 Github 的 OpenAPI,也是可以想办法找到的!

虚惊一场。

本文由博客一文多发平台 OpenWrite 发布!

标签:Github,NAME,id,github,git,https,push,com,YOUR
From: https://blog.51cto.com/u_16458956/8911168

相关文章

  • Github Actions - Error: The connection to the server localhost:8080 was refused
     Runkubectlapply-feks/aws-auth.yamlkubectlapply-feks/aws-auth.yamlkubectlapply-feks/deployment.yamlkubectlapply-feks/service.yamlshell:/usr/bin/bash-e{0}env:AWS_DEFAULT_REGION:ap-southeast-1AWS_REGION:ap-southe......
  • git远程仓库
    git创建公匙 ssh-keygen-trsa查看公匙cat~/.ssh/id_rsa.pub复制公匙[email protected]创建端名gitremoteaddorigin [email protected]:kkkk123000/git_test.gitgitremote......
  • Typora图片保存到gitee
    Typora图片保存到gitee初始化Gitee仓库登录gitee,在【设置】-【安全设置:私人令牌】新增一个令牌提交之后把token复制下来,这个token只会出现这一次,丢了就再生成新的令牌创建一个新的仓库,必须是公开的,因为markdown需要外部访问才能显示出图片下载Typora官方链......
  • Linux 本地安装搭建Gitlab私有仓库实现无公网远程访问
    GitLab是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务。Gitlab是被广泛使用的基于git的开源代码管理平台,基于RubyonRails构建,主要针对软件开发过程中产生的代码和文档进行管理,Gitlab主要针对group和project两个维度进行代码和......
  • 深入了解Git LFS:高效管理大型文件的利器
    今天在使用CodeUp上传代码时,我为项目添加了一个大小超过300MB的文件。在进行push操作时,系统提示我“推送失败,以下文件大小超过单文件200MB的系统限额,大文件请使用Git-LFS管理”。于是我开始了解GitLFS。对于需要处理大型二进制文件的项目而言,Git的性能可能成为一个瓶颈。为了解决......
  • kubernetes(k8s)Gitlab CI Runner 的安装
    kubernetes(k8s)GitlabCIRunner的安装简介从Gitlab8.0开始,GitlabCI就已经集成在Gitlab中,只要在项目中添加一个.gitlab-ci.yml文件,然后添加一个Runner,即可进行持续集成。在介绍GitlabCI之前,先看看一些GitlabCI的一些相关概念。流程逻辑如下:Jobs->Stages->Pipel......
  • AT_abc323_f [ABC323F] Push and Carry 题解
    不难发现答案的下界为\(|x_b-x_c|+|y_b-y_c|\),这是每步都推箱子的情况。但很多时候并不能直接开始推箱子,所以人要先移动到箱子的后面(相对于目的地),再把箱子往目的地推。比如这种情况(B为箱子,C为目的地):B.......C推完箱子的一边后,还要走到另一边:↓B..................
  • gitlab代码怎么拉到本地
    1、本地目录新建一个文件夹:文件夹进入后,右键执行gitBashhere先初始化:gitinit git服务上选择develop分支: 然后选择HTTP克隆:把gitlab复制下来:http://scm.skytech.io.../.../eas_api_framework.git然后紧接着上面执行:git pulllURL把代码拉下来 拉下来后,用Py......
  • 以 Git 为例演示 CentOS 系统安装软件的方式
    前言在Linux系统上安装软件有两种常用的方式。一种是通过包管理工具,直接安装;另一种是先下载源码,然后再手动编译,再安装。本文以Git为例,演示这两种安装软件的方式。使用yum安装Yum是CentOS的包管理工具。使用前先更新下Yum源:yumupdate使用包管理器安装软件非常简单,直接一......
  • git 合并分支处理
    前提合并分支之前,拉取需要合并的两个分支的最新代码;(gitpull)gitcheckout<brachName> //切换分支gitbranch-a  //查看所有分支gitstatus    //查看当前分支状态gitlog      //查看当前分支日志 gitmerge需要合并到哪个分支,就切换到哪个......