2011-08-23 9 views
0

내 레포에서 추악한 기록이 있으며 간소화하고 싶습니다. 내가 읽은 것부터 git rebase가 사용해야 할 도구가 될 것입니다. 내가하고 싶은 것입니다 :지우기 기록 : Git에서 A에서 B로 스쿼시하고 D에서 E로 커밋

를 켭이이 속으로

A--------------------------I (master) 
\      /
    B--C-------------G--H--/ (development) 
     \   /
     D--E------/ (feature-1) 
      \ /
      F--/ (feature-2) 

:

A-BCDEFH--I (master) 

(가), 나 같은 형태로 다른 커밋이 "I"를 커밋 그래서 나는 것 후 나의 마지막 병력은 다음과 같습니다 :

A-BCDEFH--I--KLMNO-P (master) 

어떻게해야합니까?

편집 :이 예제에서 D와 F는 병합 커밋이 아니며 표준 커밋이므로 병합은 커밋되지만 G와 I는 모두 기록에서 제외해야합니다. A는 A에 대한 커밋 식별자입니다

$ git checkout -b new-master master 
$ git rebase --onto A A new-master 

이 그래프에 커밋 :

+0

당신은 의도적으로 최종 역사에서 G를 떠나? –

+0

'G'는 병합 커밋이므로 히스토리가 선형화 될 때 실제 히스토리가 없습니다. (그 문제에 대해서도 역시'I'입니다 ... 그것은 리베이스에서도 사라질 것입니다.) – cdhowie

+0

이 예제에서는 병합 커밋을 생략합니다. 따라서 D와 F는 "실제"커밋입니다. 편집 된 혼란에 대해 사과드립니다. – AeroCross

답변

1

당신이 가진 첫 번째 단계를 수행 할 수 있습니다.

그러면 master (원하는 변경 사항을 적용하지 않는 병합 커밋이 기록에서 삭제됨)으로 궁극적으로 끝나는 새로운 분기 new-master이 생성됩니다. 다른 지점을 포팅하려면 하나씩 확인하고 git rebase --onto new-master master branchname을 실행하십시오. 변경 사항에 만족하면

, 당신은 master 지점을 업데이트하고 new-master을 삭제할 수 있습니다

$ git checkout master 
$ git reset --hard new-master 
$ git branch -d new-master 
+0

첫 번째'rebase' 명령의 마지막 인수로'new-master'를 원한다고 생각합니다. –

+0

네, 실제로 그것을 지적 해 주셔서 감사합니다. – cdhowie

+0

@cdhowie이 예제에서 "git rebase --onto A ** A ** new-master"라고 말하면 내가 rebase하고자하는 커밋의 범위인가? 아니면 "새로운 마스터"인가? – AeroCross

관련 문제