2009-11-24 2 views
4

git-svn rebase를 다시 할 수 있습니까? 또는 그 효과를 리셋 할 수 있습니다.git-svn rebase 끔찍하게 잘못되었습니다

내 +8000 commit git-svn 저장소에서 분기를 병합 한 후 문제가 발생했습니다. 내 로컬 "마스터"는 트렁크의 전체 로그 근처에 아무것도 반영하지 않습니다.

그리고 git svn rebase을 실행하면 새 개정판을 올바르게 가져 오지만 svn 트렁크의 모든 8000+ 커밋과 비슷한 모양을 적용하려고 시도합니다.

마스터의 HEAD를 트렁크의 HEAD로 재설정하고 확인하는 방법이 있습니까?

답변

9

"HEAD"는 "head"또는 "tip"과 같은 것이 아닙니다. "HEAD"는 현재 체크 아웃 된 분기를 나타냅니다.

어쨌든. :)

당신이 한 모든 것을 버리고 마스터를 트렁크의 정확한 사본으로 돌려 보내려한다면, 그것은 매우 간단합니다. 해당 마스터를 가정하면 체크 아웃 :

git reset --hard trunk 

경고 : 리셋 --hard는 커밋되지 않은 변경을 파괴합니다.

이전 작업의 고급 구원을 원한다면 git의 수많은 안전 벨트 중 하나 인 reflog를 아주 간단하게 소개하겠습니다. 예를 들어

git log -g master 

이라고 말하면 마스터에 대한 "세이브 포인트"목록이 표시됩니다. 우리는 이것을 git 땅의 reflog라고 부른다. 연산이 분기를 변경할 때마다 새로운 분기 점이 해당 분기의 reflog 맨 위에 추가됩니다. 마지막 작업은 당신이 무섭게 지사를 엉망 않은 경우 즉, 당신은 그 작업을하기 직전에 있었는지에 지점을 반환 할 수 있습니다 : 당신이 reflog를 보면 일단 @{1} 더 이해가됩니다

git reset --hard [email protected]{1} 

있다. 자식은 @{10.minutes.ago}과 같은 더 멋진 구문도 지원합니다.

더 많은 것들이 가능하지만, 지금 당장 수정해야합니다.

+0

나는 트렁크 키워드를 알지 못했다 :'git reset --hard trunk'. 그것은 트릭을했다. –

+0

정확히 키워드는 아닙니다. 그것은 SVN 트렁크의 git-svn 사본의 이름 일뿐 ... 오히려 짧은 이름의 전체 이름입니다. 예를 들어, git branch -r을 사용하여 짧은 이름의 전체 목록을 볼 수 있습니다. –