2015-01-09 4 views
2

그래서 마스터와 버그 수정 분기를 계속 사용하는 상황이 있습니다. 내가 마스터에 대한 커밋을 쪼개고 버그 수정을 시도했지만 병합 충돌이 발생했습니다. 적절한 방법은 무엇입니까? 나는 로컬에서 일하고 리모컨은 없다.자식이있는 지점에서 커밋을 스쿼시하는 방법

그것은 다음과 같습니다

A - B - C - D - E - F [master] 
        \     
         G - H - I - J - K [bugfix] 

내가 스쿼시 할 - B - C - D - E - F를 여전히 숙청 마스터 분기를 계속 버그를 수정했다.

+2

유용한 답변을 얻으려면 Google에 더 알려야합니다. repo의 히스토리의 어떤 부분이 공유 된 리모컨으로 푸시되었는지 알려주고 ASCII 커밋 그래프를 추가하십시오 (참조 : http://stackoverflow.com/questions/25488138/move-initial-commits). -off-master-to-another-branch-in-git/25490288 # 25490288)를 사용하여 최근 기록을 설명합니다. – Jubobs

답변

4

공유 커밋을 rebasing하거나 squashing하기 때문에 공유 기록에 대한 Jubob의 관점은 매우 중요합니다.

로컬 커밋을 사용한다고 가정합니다.

[master] A---B---C---D 
         \ 
[bugfix]    1---2---3 

하고 B, CD이 남아 커밋 D'

[master] A---D' 
      \ 
[bugfix] B---C---D---1---2---3 

주를 저지 새로운으로 B, CD 스쿼시하기로 결정

은이 시작 가정 bugfix 가지. 당신은 단순히 masterbugfix을 리베이스하는 경우, 망할 놈이 작업을 수행하려고합니다 :

[master] A---D' 
       \ 
[bugfix]  B---C---D---1---2---3 

그러나 B, CD에 의해 도입 된 변화는 이미 D'에 포함되어 있습니다.

git rebase --onto master D bugfix 

D 최신 수 하지하는 것이되어야한다 bugfix에 커밋한다 :

[master] A---D' 
       \ 
[bugfix]  1---2---3 

당신은 rebase--onto 옵션을 사용하여이 작업을 수행 할 수 있습니다 : 당신이 정말 끝낼 원하는 것은 이것이다 리베이스 할 때 포함됩니다.