실수로 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 mastergit log foo올바른 지점을 복원 할 수 있도록.


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

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