2010-12-28 2 views
6

나는이 모양으로 자식에 두 가지 가지가있다.한 단계에서 복잡한 대화 형 리베이스?

* fffffff commit f 
* ddddddd commit d 
* bbbbbbb commit b 
| * eeeeeee commit e 
| * ccccccc commit c 
| * aaaaaaa commit a 
|/ 
* 2222222 base revision 2 
* 1111111 base revision 1 

rebase --interactive를 사용하여 커밋을 리베이스 (reorder)하고 순서를 바꾸고 싶습니다. 그러나 커밋을 여러 개 인터리브하고 이와 같은 모양으로 마무리하려고합니다.

* ffffff2 commit f 
* eeeeee2 commit e 
* dddddd2 commit d 
* cccccc2 commit c 
* bbbbbb2 commit b 
* aaaaaaa commit a 
* 2222222 base revision 2 
* 1111111 base revision 1 

한 번에이 리베이스를 수행 할 방법이 있습니까? 나는 commit e의 맨 위에 커밋 b를 리베이스하고 두 번째 인터랙티브 리베이스를 수행하여 모든 커밋을 정렬함으로써 두 단계로 시도했다. 문제는 (커밋 b와 커밋 e 사이의) 병합 충돌이 발생한다는 것입니다 (커밋 a 후에 커밋 b를 배치함으로써). 충돌을 해결할 가치가 없습니다.

답변

8

시작 예를

 
git checkout BranchWithF 
git rebase -i HEAD~3 

에 대한 하나 개의 지점 (BranchWithF 또는 BranchWithE 중 하나)과 상호 작용 REBASE를 발행와 에디터와 읽기 (추가, 목록 팝업 커밋 언제 :에 입력 키보드 ...) 및 인터리브

 
pick aaaaaaa 
pick ccccccc 
pick eeeeeee 

목록에 적합합니다.

는 그 후, BranchWithF 모두 6 커밋을해야합니다, 당신은 멀리 (여전히 3 커밋을 가지고) BranchWithE 던질 수 있습니다.

+0

와우, 완벽! 대화 형 리베이스 중에 라인을 추가 할 수 있다는 것을 결코 알지 못했습니다. 나는 당신이 여기에 대한 신용을 받아야 비슷한 질문을했다 : http://stackoverflow.com/questions/3251011/can-i-rebase-and-squash-commits-at-the-same-time –

+0

답변이 게시 됨. – user502515