2011-01-11 1 views
19

회사에서 위임받은 svn 서버로 좋은 결과를 얻기 위해 git svn을 사용하고 있습니다. 난 그냥 REBASE가 무섭게 비스듬히 이동했고, 나는 "m는 복구 할 수있는 가장 좋은 방법을 알아 내려고실패한 rebase에서 복구

여기

무슨 일이 있었는지 :.

  1. 로 시작하려면, 나는이

    ---1 (master) 
        \--B--C--D--E (feature/fix-widgets) 
    
  2. 했다
  3. 그런 다음 git checkout master을 수행 한 다음 마스터에서 git svn rebase을 수행하여 해당 커밋을 제거합니다. 변경 사항이 완전히 다른 폴더에 있었기 때문에 내 지사와 마스터 사이에 충돌이 예상되지 않았습니다. 나는 이것을 가지고있다: 1--2--3--4가 SVN에서 가져온 커밋된다

    ---1--2--3--4 (master) 
        \--B--C--D--E (feature/fix-widgets) 
    

    .

  4. 다음으로 나는 git checkout feature/fix-widgets을 수행 한 다음 git rebase master을 수행합니다. 즉각적인 갈등이 있고, 더해지지 않는 것들이 있기 때문에 나는 물건을 훔쳐서 더 조심스럽게 바라보기로 결정합니다. 나는 git rebase --abort을 해, 이것이 내가 rebase 전에 있었던 곳으로 나를 복구 할 수 있기를 바란다.

  5. 나는 git rebase --abort을하고 내가 할 모르겠어요 이제 다음과 같은 메시지가

    $ git rebase --abort 
        error: git checkout-index: unable to create file somedir/somefile.cs (Permission denied) 
        fatal: Could not reset index file to revision 'be44daa05be39f6dd0d602486a598b63b6bd2af7'. 
    
  6. 을받을 수 있습니다. git status은 내가 feature/fix-widgets에 있다는 것을 보여 주지만 이전에 커밋 된 많은 수의 추적되지 않은 파일이 많이 변경되어 진행되었습니다. 내가 E을 되 찾을 수 있으면 괜찮을 것이다.

+1

나는이 매우 똑같은 문제를 오늘 만났습니다. 당신이 Windows에서 git을 사용하고 있었다고 추측합니다. 공유 잠금 장치를 생각한 멋진 운영 체제가 좋은 생각이었습니다. 내 생각 엔 somedir/somefile.cs에서 숨 막힌 이유는 그것이 어딘가에 열려 있다는 것이 었습니다 ... 이것이 실패한 리베이스의 원인이었습니다. 내가 찾은 모든 열린 프로그램을 닫고 선택한 대답에 따라 재설정 한 다음 리베이스하여 문제없이 작업했습니다. –

+0

+1 우는 걸 막아 준 잘 쓰여진 질문입니다. – Tinman

답변

25

당신이 그들을 복귀하기 쉽게, ORIG_HEAD

ORIG_HEAD 위험 할 동작을 명령에 의해 설정 HEAD 이전 상태이며, 한 번 봐 있어야합니다. 그래서 다시 얻을이 git reset을 시도 [email protected]{1}이 ([email protected]{1}는 항상 HEAD의 마지막 값입니다 ORIG_HEAD 위험한 작업 전에 HEAD의 마지막 값이다)

ORIG_HEAD 거의 비슷하다 :
은 이제 망할 놈의 reflog 것을 덜 유용 어떤 리베이스 이전에 :

git reset --hard ORIG_HEAD 
+0

그게 쉬웠습니다. 나는 리셋을했고, 다시 말하면 다시 훼손하려 노력했다. * shrug * – notJim

+0

@notJim : true이지만, 이러한 명령을 수행 할 때'ORIG_HEAD'를 유념하는 것이 유용 할 수 있습니다. 그것은 편리하게 올 수 있습니다. – VonC