2013-07-01 2 views
0

하나의 명령으로 리베이스 (rebase)와 브랜치 전진 (forward forward)을 동시에 할 수있는 방법이 있습니까? $ DESTINATION을 (를) 체크 아웃하는 동안 다음을 실행하려고합니다.브랜치에서 리베이스 (rebase)하고 브랜치 포인터를 앞당길 수있는 방법

git rebase --no-ff --interactive --onto "$DESTINATION" "$IMPORT_BEGIN" "$IMPORT_END" 

하지만 완료되면 분리 된 헤드 상태가됩니다. 해당 범위를 선택하는 것과 비슷한 결과를 얻을 수있는 방법이 있습니까? 즉, $ DESTINATION이 마지막 rebased 커밋을 가리 키도록 완료되면 어떻게됩니까?

답변

0

이것은 당신이 요구하는지 어떻게해야 : - 많은 다른 git 명령처럼 $IMPORT_BEGIN 이름 경우는 먼저 벚꽃으로 수확해야 할 커밋

git checkout $DESTINATION  # assuming here that that's a branch name, not a hash 
git cherry-pick $IMPORT_BEGIN..$IMPORT_END 

주, 당신은 대신 ${IMPORT_BEGIN}~1를 사용해야합니다 cherry-pick<begin>..<end>의 범위를 해석하여 "<begin>에서 모두 <end>까지 커밋합니다"를 의미합니다.

브랜치 헤드를 손으로 체크 아웃하면 (해시에 의한 체크 아웃과 달리 머리가 분리됨) cherry-pick은 자동으로 브랜치 헤드를 진행합니다.

편집 :이 작업을 수행 rebase을 사용하기 위해서는, 이제 devel라는 지점에있는 복제 할 커밋을 가정하자 (즉, $IMPORT_END=devel 아닌 해시 - 대신 지점의 해시를 당신이 결국 어떻게되어 사용 분리 된 헤드가 있음)이 커밋을 master으로 이동하려고합니다. 커밋을 복사합니다

git checkout devel 
git rebase --onto master $IMPORT_BEGIN..$IMPORT_END 

을하지만, 원하는 최종 상태 것 같다 $IMPORT_END의 새로운 버전에 master 분기를 진행하지 않습니다이 경우, 당신은이 작업을 수행 할 수 있습니다.

git checkout master 
git merge --ff-only devel 

devel 커밋 새를 가리 키도록 rebase에 의해 업데이트 된 것이며, merge 지금 같은 장소에 master 지점을 만들 것입니다 : 그것을 달성하기 위해, 당신은 함께 위를 수행해야합니다.

+0

'rebase'로 할 수있는 가능성은? rebase에 의존하고 있습니다. 나중에 작동하도록 메커니즘을 중단/중단합니다. 체리 피클을 사용하면 같은 방식으로 작동하지 않을 것입니다. ( – viraptor

+0

'rebase '로 할 수는 있지만 다른 접근 방법이며 몇 가지 추가 단계가 필요합니다. – twalberg