2012-04-04 5 views
8

오늘 나는 한 가지 문제에 직면했다. 팀원이 마스터에서 지점을 만들었습니다. 그는이 지사에서 하나의 기능을 개발 한 후 하위 지사의 지점에 두 개의 하위 기능을 개발했습니다. 마침내 그는 전체 리팩터링 커밋을했습니다. 그래서 ...병합 된 자식이있는 Git rebase 브랜치

 C--D E--F    | subfeatures 
    / \/ \ 
    B------M1------M2--G--H | feature 
/
A-------------------K  | master 

보통 빨리 감기가 마스터로 병합되기 전에 기능 분기를 리베이스합니다. 물론이 rebase는 실패합니다. 으로 업데이트 기능 분기처럼 보이는되었다 : C & 물론 포인터의

 B'--C'--D'--E'--F'--G'--H' 
    /
A--K 

D 그래서 나는 또한 두 개의 하위 기능을 가지는 '공기'성장 얻을 잘못되었다. 하위 기능 분기가 기능에 병합되지 않은 경우 문제를 해결하는 방법을 알고 있지만 현재로서는 혼란 스러웠습니다. 나는 리사이징 한 복구 지점에서 모든 것을 체리로 골라서 다시 합병했다. 여기에 더 쉬운 방법이 있습니까?

답변

11

git rebase --preserve-merges이 제대로 작동하려면 git1.7.6 +가 필요합니다.

짧은 이야기 : 병합을 완료하고 누군가가 커밋을 푸시하기 전에 커밋을 푸시했습니다. 해결책은 당신이 한 병합을 자식에게 알려주는 것입니다.

git rebase --preserve-merges <upstream> 

또는

git rebase -p <upstream> 

그러나 문제가있다, 병합은 그들이 REBASE 기계에 의해 선택되지 않습니다 해결 충돌이 있다면.
그리고 다시 충돌을 해결 끝날 것 ... 적어도이 자식 버전의 경우 1.7.5.4

(즉, git rerere을 요구 것)

2

커밋마다 손으로 하나씩 커트 틱 했습니까?

git rebase -i master feature을 실행하고 원하는대로 기록을 다시 작성하십시오.