2013-06-12 1 views
1

가 나는 다음과 같다 커밋의 시리즈를 말해봐 (REBASE 역) 다음과 같이 보일 것입니다 : d->f->h->e->g.자식 지점까지 트리를 이동하는 방법

그러나 트리가 위쪽으로 이동할 수있는 방법이 있습니까?

h {master} 
^ 
f 
^ 
d g {branch1} 
^^
c e 
^/ 
b 
^ 
a 

답변

2

branch1에있는 동안 git rebase --onto b c branch1을 실행하십시오. 이 일을해야합니다.

+0

그것은 작동하지 않을 것이다, 나는 시험했다. b는 c와 branch1의 조상이므로 b에 대한 간단한 rebase는 아무 일도 일어나지 않을 것입니다. – dyng

+0

그것은 리베이스가 작동하는 방법입니다. 이미'--onto'를 사용하여 무언가를 테스트했다면, 실행 한 명령을 두 번 확인해야합니다. 자신을 설득하고 싶다면 공식 문서 (https://www.kernel.org/pub/software/scm/git/docs/git-rebase.html)로 가서'git rebase -onto master topicA topicB ' –

+0

나는 그것을 다시 시험했고, 이번에는 잘 작동한다. 아마 내가 SHA를 잘못 철자했을 것이다. 처음. +1 감사합니다. 그런 다음 당신의 솔루션과 제 사이에 다른 점을 발견했습니다. ** 스쿼시 **는 평판에서 '제거'를 의미하는 반면에 '스플래쉬'를 의미합니다. 어쩌면 나는 그것을 오해했다. – dyng

2

사실, BRANCH1보다는 REBASE의 일반적인 의미에서 제거 C입니다. 당신은 pick c<SHA1> 및 전체의 라인을 제거 rebase

git rebase -i b<SHA1> 

의 대화 형 모드와 함께 할 수 있습니다.

+0

+1 이것은 좋은 생각이기 때문에, 나는 생각합니다. - 토론토는 똑같은 일을하는 공식적으로 올바른 해결책입니다. – Benubird

+0

@Benubird 나는 정확하게 동일하지 않다는 것을 인정해야한다. Guillaume Darmont의 대답에 대한 나의 의견을 참고할 것. 진짜 신원은 대화 형 모드에서 그것을 제거하기보다는'squash c '입니다. 나의 이전 접근 방식은'c'가 도입 한 수정을 버립니다. – dyng

+0

예, 선을 제거하는 것이 옳습니다. branch1에서'c '를 제거하려고 시도하고 있습니다. 스쿼시가 아닙니다. 두 응답 모두 그렇게합니다. – Benubird