실수로 git push -f를 어떻게 복구 할 수 있습니까?


13

방금 git push -f실수로 도망 갔으므로 원격 지사를 덮어 썼습니다.

기발한:

(remote origin:)
    branch master -> commit aaaaaaa
    branch foo    -> commit bbbbbbb

(local)
    branch master -> commit ccccccc
    branch foo    -> commit ddddddd

후 git push -f:

(remote origin:)
    branch master -> commit ccccccc
    branch foo    -> commit ddddddd

내 로컬 리포지토리에서 master브랜치에서 작업하고 있으므로 커밋 을 얻을 수 있기 때문에 master커밋 하도록 브랜치 를 복원 aaaaaaa할 수 aaaaaaa있습니다 git reflog. 그러나 bbbbbbb전에 뽑지 않았기 때문에 커밋을 할 수 없었습니다 git push -f.

git reflog원격 저장소에서 시도했지만 베어 저장소의 Reflog에는 유용한 것이 없습니다.

원격 저장소에서 foo커밋 하기 위해 분기를 다시 복원하려면 어떻게 bbbbbbb해야합니까?

(PS 실제 값을 모르겠습니다 bbbbbbb.)


그러나 원격 저장소는 베어 저장소입니다.
— Xiè Jìléi 2016 년

답변:


12

이 시도:

  1. SSH를 통해 원격에 연결하십시오.

  2. 전체 원격 저장소를 백업하십시오.

    tar cvzf project-backup.tgz /path/to/project.git
    
  3. 당신이 알고있는 경우에 최소한의 처음 몇 문자를 bbbbbbb사용, git show bbbbbb및 / 또는 git log bbbbbb전체 해시를 저지 찾을 수 있습니다. (해시 만 필요하면 git rev-parse bbbbbb작동하지만 항상 확인하는 것이 좋습니다.)

    값 을 전혀 모르는 경우 run을 실행 git fsck하면 "매달린 커밋"목록이 표시됩니다. 각각의 사용 커밋 검사 git show <hash>와 git log <hash>올바른 일을 찾을 때까지.

  4. 분기 참조를 업데이트하십시오.

    echo aaaaaaaaaaaaaaa.... > refs/heads/master
    echo bbbbbbbbbbbbbbb.... > refs/heads/foo
    
  5. 사용 git log master및 git log foo올바른 지점을 복원 할 수 있도록.


감사합니다, 매달려 분기를로 저장했습니다 git fsck.
— Xiè Jìléi 2016 년

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.