주제 솔루션
게시 된 질문에 대답하기위한 올바른 명령은 다음 중 하나 일 수 있습니다 (분기 topic
가 이미 체크 아웃 되었다고 가정 ).
git rebase --onto B master
git rebase --onto master~1 master
git rebase --onto B A
git rebase --onto B C
git rebase --onto B
topic
체크 아웃되지 않은 경우 다음 topic
과 같이 명령에 마지막 명령을 추가 하면됩니다 (마지막 명령 제외).
git rebase --onto B master topic
또는 먼저 다음을 사용하여 지점을 확인하십시오.
git checkout topic
모든 커밋 문자열을 대상 커밋으로 리베이스
우리가 필요로하는 명령의 기본 형태는 다음과 같습니다.
git rebase --onto <Target> [<Upstream> [<Branch>]]
<Branch>
선택적이며 나머지 명령을 실행하기 전에 지정된 분기를 체크 아웃하기 만하면됩니다. 리베이스하려는 지점을 이미 체크 아웃 한 경우 필요하지 않습니다. 사용자가 지정한해야합니다 <Upstream>
지정하기 위해 <Branch>
또는 자식이 당신이 지정하는 생각합니다 <Upstream>
.
<Target>
커밋 문자열을 첨부 할 커밋입니다. 지점 이름을 제공 할 때는 해당 지점의 헤드 커밋을 지정하기 만하면됩니다. <Target>
이동되는 커밋 문자열에 포함되지 않는 커밋이 될 수 있습니다. 예를 들면 다음과 같습니다.
A --- B --- C --- D master
\
\-- X --- Y --- Z feature
전체 기능 지점을 이동하려면, 당신은 선택할 수 없습니다 X
, Y
, Z
, 또는 feature
는 AS <Target>
그 이후 모든 이동하는 그룹 내부 커밋이다.
<Upstream>
두 가지를 의미 할 수 있기 때문에 특별합니다. 체크 아웃 된 브랜치의 조상 인 커밋이면 컷 포인트 역할을합니다. 내가 제공 한 예에서,이없는 어떤 것 C
, D
또는를 master
. <Upstream>
체크 아웃 된 지점의 헤드가 이동 될 때까지의 모든 커밋
그러나 <Upstream>
조상이 아닌 경우 git은 체크 아웃 된 분기가있는 공통 조상을 찾을 때까지 지정된 커밋에서 체인을 백업합니다 (찾을 수 없으면 중단). 우리의 경우,에서 <Upstream>
의 B
, C
, D
, 또는 master
것입니다 커밋의 모든 결과 B
절단 지점의 역할. <Upstream>
자체는 선택적인 명령이며, 지정하지 않으면 git은 입력 한 것과 동일한 체크 아웃 된 브랜치의 부모를 찾습니다 master
.
git은 커밋하고 이동할 커밋을 선택 <Target>
했으므로 대상에 이미 적용된 커밋을 건너 뛰기 위해 커밋을 적용합니다 .
흥미로운 예와 결과
이 시작점을 사용하여 :
A --- B --- C --- D --- E master
\
\-- X --- Y --- Z feature
git rebase --onto D A feature
커밋을 적용 B
, C
, X
, Y
, Z
커밋하기 D
및 스킵하지 않는 B
및 C
그들은 이미 적용되어 있기 때문이다.
git rebase --onto C X feature
커밋 을 효과적으로 삭제하고 커밋 을
적용 Y
하고 커밋합니다.Z
C
X
git checkout B
실행하기 전에 시도 했습니까git rebase
?