2013-08-27 2 views
2

두 개의 원격 svn 분기를 추적하는 두 개의 로컬 자식 분기가 있습니다.git svn rebase -i 엉망입니다. 그것을 고칠 수 있습니까?

나는 master가 svn 트렁크를 추적하고 'branch'가 svn 'branch'를 추적하는 방식으로 설정을했습니다. 나는 때문에 내가

자식 SVN은 -i HEAD를 리베이스 입력 속도 로컬 '지점'과 몇 가지 지역의 일을했다 최근

~ 2

대신

자식의 리베이스 -i HEAD ~ 2. 명령 줄에서

두 개의 지역 커밋에게 뭔가 이상한

자식을 않은 일을 한 후, 그것을 내 로컬 '지점'에 svn의 트렁크에서 가져와으로 업데이트 커밋. 내가 다시 마스터로 가서 git svn rebase를 시도했을 때 마스터 트리에서 'branch'에 병합 된 커밋이 누락되었습니다. 이것은 두 브랜치 간의 병합이 깨졌을뿐만 아니라 본질적으로 트렁크와 동기화되지 않기 때문에 마스터 작업을 수행 할 수 없다는 것을 의미합니다. 이 상황을 해결할 방법이 있습니까?

답변

0

reflog를 사용하여 리베이스를 실행 취소 할 수 있습니다. git reflog을 사용하여 리베이스를 실행하기 전에 분기가 지정한 커밋을 찾으십시오. 그런 다음 git reset --hard <COMMIT-ID>을 사용하여 분기를 다시 전환하십시오.

경고 :

이 일을하기 전에 로컬 변경 사항은 (그렇지 않은 경우는 사라질 것) git stash에주의하십시오. 또한 손상된 rebase 후에 다른 커밋을 만든 경우 수동으로 (아마도 git cherry-pick을 사용하여) 구출해야합니다.

+0

가장 먼저해야 할 일입니다. 그러나이 작업과 git svn rebase를 수행 한 후에 똑같은 결과를 얻었으므로 git-svn 상태가 어떻게 든 변경되었다고 생각하게합니다. –

+0

@ Psy-Fi : git-svn은 자체 상태가별로 없습니다. 그 유일한 상태는 그것이 생성하는 원격 추적 브랜치의 상태입니다 (예를 들어 SVN 브랜치 당 하나,'git 브랜치 -a'' 리모트 /'로 볼 수 있습니다). 'git branch -avv'의 결과를 질문에 편집 할 수 있습니까? – sleske

+0

나는 공식적인 문서에서 그렇게하지 않으려 고 제안했기 때문에 svn 브랜치를 병합하기 위해 git 사용을 중단했다. 나는 여전히 git를 사용할 것이지만 같은 브랜치의 로컬 커밋에 대해서는 엄격하게 사용한다. 불행히도 나는 이것을 실제 작업을 위해 사용하고 있었고 재난을 감당할 여유가 없었기 때문에이 작업을 위해 로컬 git 저장소를 삭제해야했다. 이 질문이 더 이상 유효한 것으로 간주 될 수 있는지 확실하지 않습니다. –