2010-03-12 5 views
30

방금 ​​마스터에 사소한 수정으로 아주 오래된 브랜치를 리베이스하려고했습니다. 관련된 세 파일 중 하나만 병합하는 데 문제가있어서 Skip을 생각하지 않았지만 파일을 건너 뛸 것이라고 생각했지만, 변경 사항을 모두 건너 뛰었습니다. . 이제 rebase가 끝났고 내 변화가 사라진 것처럼 보입니다.리베이스 중에 의도하지 않은 스킵에서 복구

나는 undoing rebase에 관한 질문을 보았지만, 모두 나에게 그리스어로, 나는 reflog를 본다. 그러나 어떤 브랜치가 리베이스 전에 첨부되었는지는 모른다.

어쨌든 rebase를 실행 취소 할 필요는 없습니다. 단지 두 파일의 변경 사항을 복구 할 수 있기를 원합니다. 어쨌든이 작업을 제대로 수행 할 수 있습니까 (이 작업을 수행하지 않으면 어제 저장소를 백업하고 손으로 비트를 선택해야합니다).

답변

35

먼저 git 작업 폴더의 타볼을 만드십시오. 이렇게하면 여러 번 시도하는 것이 더 쉬워집니다.

다음은 또 다른 세 분기는
  • 자식이 지금이 시점에서 마스터에게 (당신은 생략)
  • 몇 가지 문제
  • 을 리베이스

    • 자식 체크 아웃 일어난 가정하자 여전히 다른 구식 지점에 있고 reflog에 표시됩니다 :

      6f8348f [email protected]{0}: rebase: <commit message of last commit in another-old-branch> 
      e547ec0 [email protected]{1}: checkout: moving from another-old-branch to e547ec0d2a558d189464fc57192066b34ec5f28f^0 
      65cedf8 [email protected]{2}: checkout: moving from master to another-old-branch 
      

      분기가 심볼릭 링크 (또는 포인터)와 같다고 가정하면 이전 커밋 -id에 'another-old-branch'지점을 되돌려 놓아야합니다. 오래된 커밋은 여전히 ​​거기에 있으며, 당신의 rebase에 의해 건드리지 않았습니다. 좀 : e547ec0d2a558d189464fc57192066b34ec5f28f했다 여기에 우리의 경우

      를 '헤이 자식, 다른 세-분기 e547ec0d2이 일어난 다른 모든 것을 잊고있다', 그래서 우리는 지금 무엇을해야

      • 자식 체크 아웃 또 -이다 당신이 이미
      • 자식없는 지사가 다시 정상으로 지금 --hard e547ec0d2a558d189464fc57192066b34ec5f28f에게

      를 재설정하면 오래 가지 #. 그리고 rebase를 다시 시도 할 수 있습니다.

      reflog는 aboved 예제보다 조금 복잡합니다. 하지만 어딘가에 거기에 stil해야합니다 ...

      행운을 빕니다!

    +1

    아니, 복구를 시도하는 동안 다른 것을 망쳤어야합니다. 다음에 표시되는 답변 ... – Benjol

    +8

    +1; 또 다른 팁 :'git log -g'는 reflog를 검색하는 더 좋은 방법입니다. –

    +2

    매력처럼 일했습니다! 내 아침에 구해 주셔서 감사합니다. – kmanzana

    관련 문제