GitHub&Git

[GitHub] 깃헙 잔디 사라졌을 때 당황하지 않고 복구하는 방법.

findTheValue 2021. 7. 25. 20:50

1.잔디 옵션이 프라이빗으로 바뀌어있는지 확인한다.

=> public으로 바꾼다.

 

2. 깃헙에 등록되어있는 메일이 바뀌어서 local git의 메일주소와 불일치 하게 되었는지 확인한다.

=> 깃 메일을 일치시키던가 깃헙에서 삭제한 메일을 다시 등록한다.

 

3. 특정레포의 강제푸시 혹은 merge로 commit기록이 전부 초기화 됐다!!

이러면 정말 눈물나지만 해결 방법이 있다.

 

github api를 이용해 과거로 회귀하는것.

 

 

1. Access Token을 발급받는다.

https://github.com/settings/tokens 에 가서 토큰 생성을 누르고 repo전체 선택 후 발급 받는다.

 

2. 강제 푸시 전 혹은 레포가 정상일 적 마지막 커밋 SHA값을 확인한다.

 

curl -H "Authorization: token <access-token>" https://api.github.com/repos/<owner>/<repo>/events
[
  {
    "id": "16958161171",
    "type": "PushEvent",
    "actor": {
      "id": 3965510,
      "login": "Web-Engine",
      "display_login": "Web-Engine",
      "gravatar_id": "",
      "url": "https://api.github.com/users/Web-Engine",
      "avatar_url": "https://avatars.githubusercontent.com/u/3965510?"
    },
    "repo": {
      "id": 381164815,
      "name": "Web-Engine/recover-test",
      "url": "https://api.github.com/repos/Web-Engine/recover-test"
    },
    "payload": {
      "push_id": 7418088186,
      "size": 0,
      "distinct_size": 0,
      "ref": "refs/heads/master",
      "head": "cbe8d565dd4763e53c7b1281b9550453f7574753",
      "before": "afee477d063c83998a39a05f2a008a8470aed7d1",
      "commits": [

      ]
    },
    "public": true,
    "created_at": "2021-06-28T21:29:48Z"
  },
  {
    "id": "16958155891",
    "type": "PushEvent",
    "actor": {
      "id": 3965510,
      "login": "Web-Engine",
      "display_login": "Web-Engine",
      "gravatar_id": "",
      "url": "https://api.github.com/users/Web-Engine",
      "avatar_url": "https://avatars.githubusercontent.com/u/3965510?"
    },
    "repo": {
      "id": 381164815,
      "name": "Web-Engine/recover-test",
      "url": "https://api.github.com/repos/Web-Engine/recover-test"
    },
    "payload": {
      "push_id": 7418085595,
      "size": 1,
      "distinct_size": 1,
      "ref": "refs/heads/master",
      "head": "afee477d063c83998a39a05f2a008a8470aed7d1",
      "before": "cbe8d565dd4763e53c7b1281b9550453f7574753",
      "commits": [
        {
          "sha": "afee477d063c83998a39a05f2a008a8470aed7d1",
          "author": {
            "email": "gsts007@gmail.com",
            "name": "TaeSang Cho"
          },
          "message": "Add original message",
          "distinct": true,
          "url": "https://api.github.com/repos/Web-Engine/recover-test/commits/afee477d063c83998a39a05f2a008a8470aed7d1"
        }
      ]
    },
    "public": true,
    "created_at": "2021-06-28T21:29:16Z"
  },
  {
    "id": "16958149731",
    "type": "CreateEvent",
    "actor": {
      "id": 3965510,
      "login": "Web-Engine",
      "display_login": "Web-Engine",
      "gravatar_id": "",
      "url": "https://api.github.com/users/Web-Engine",
      "avatar_url": "https://avatars.githubusercontent.com/u/3965510?"
    },
    "repo": {
      "id": 381164815,
      "name": "Web-Engine/recover-test",
      "url": "https://api.github.com/repos/Web-Engine/recover-test"
    },
    "payload": {
      "ref": "master",
      "ref_type": "branch",
      "master_branch": "master",
      "description": null,
      "pusher_type": "user"
    },
    "public": true,
    "created_at": "2021-06-28T21:28:40Z"
  },
  {
    "id": "16958113320",
    "type": "CreateEvent",
    "actor": {
      "id": 3965510,
      "login": "Web-Engine",
      "display_login": "Web-Engine",
      "gravatar_id": "",
      "url": "https://api.github.com/users/Web-Engine",
      "avatar_url": "https://avatars.githubusercontent.com/u/3965510?"
    },
    "repo": {
      "id": 381164815,
      "name": "Web-Engine/recover-test",
      "url": "https://api.github.com/repos/Web-Engine/recover-test"
    },
    "payload": {
      "ref": null,
      "ref_type": "repository",
      "master_branch": "main",
      "description": null,
      "pusher_type": "user"
    },
    "public": true,
    "created_at": "2021-06-28T21:25:07Z"
  }
]

대충 이런 응답이 오는데 저기서 커밋메시지를 잘 확인하고 복구하고 싶은 시점의 SHA값을 복사해온다.

 

curl -H "Authorization: token <access-token>" -X POST -d '{"ref":"refs/heads/<new-branch-name>", "sha":"<sha-from-step-1>"}' https://api.github.com/repos/:owner/:repo/git/refs

 

3.그리고 새 브랜치를 만들어 복구 내용을 확인해본다.

 

4. 복구 돼있다면 그 브랜치를 clone한다.

git clone https://github.com/<owner>/<repo>.git

 

5. 

git reset --hard origin/<new-branch-name>

 

메인브랜치를 생성한 브랜치로 강제로 덮어 씌운다.

 

6. 마지막으로 메인 레포로 강제 푸시한다.

git push -f origin master

 

이 방법으로 3개월치 잔디 밀린거 다시 복구했다.