--onto
잠시 건너 뛰자. upstream
그리고 branch
매우 기본적이고 실제로는 모방 checkout
되어 branch
있으며 두 번째 인수는 선택 사항입니다.
git branch <newbranch>
git branch <newbranch> <base>
git checkout -b <newbranch>
git checkout -b <newbranch> <base>
git rebase <upstream>
git rebase <upstream> <branch>
(제외하고, 이러한 인수의 이름 rebase
, "상류"와 "분기"매우 아니다 IMO 설명적인 내가 일반적으로 peachoftree처럼 생각. <start>
그리고 <end>
내가 그들을 사용하게 될 방법이다, : git rebase <start> <end>
)
두 번째 분기가 생략되면 결과는 해당 분기를 먼저 체크 아웃 한 다음 해당 분기를 지정하지 않은 것처럼 수행하는 것과 거의 같습니다. 예외는 branch
현재 지점을 변경하지 않습니다.
git checkout <base> && git branch <newbranch> && git checkout <previous_branch>
git checkout <base> && git checkout -b <newbranch>
git checkout <end> && git rebase <start>
rebase
호출했을 때 수행되는 작업 을 이해하기 위해 먼저 특수 유형의 병합으로 생각했습니다. 실제로는 아니지만 처음으로 rebase를 이해하기 시작했을 때 도움이되었습니다. peachoftree의 예를 빌리려면 :
A--B--F--G master
\
C--D--E feature
git merge master
이 결과 :
A--B--F-----G master
\ \
C--D--E--H feature
A는 동안 git rebase master
(분기 동안은 feature
!)이 결과 :
A--B--F--G master
\
C'--D'--E' feature
두 경우 feature
모두 master
및의 코드가 모두 포함 feature
됩니다. 에 있지 않으면 feature
두 번째 인수를 사용하여 바로 가기로 전환 할 수 있습니다 git rebase master feature
. 위와 동일한 작업을 수행합니다.
지금, 특별한 --onto
. 이를 기억해야 할 중요한 부분은 <start>
지정하지 않은 경우 기본값으로 설정 된다는 것 입니다. 위의 내용을 --onto
구체적으로 지정 하면 결과는 동일합니다.
git rebase --onto master master
git rebase --onto master master feature
( 정신적으로 파싱하기 쉽기 때문에 단순히 --onto
지정 하지 않고는 사용하지 않으며 <end>
, 이미 두 경우 모두 동일하다고 생각합니다 feature
.)
왜 --onto
유용한 지 알아보기 위해 다른 예가 있습니다. 내가 켜져 feature
있고 버그를 발견 한 다음 수정을 시작했지만 실수 feature
대신 분기되지 않았다고 가정 해 봅시다 master
.
A--B--F--G master
\
C--D--E feature
\
H--I bugfix
내가 원하는 것은 bugfix
더 이상에 의존하지 않도록 커밋을 "이동" 하는 것입니다 feature
. 그대로,이 답변에서 위에 표시된 모든 종류의 병합 또는 리베이스 feature
는 두 개의 커밋과 함께 세 개의 커밋을 가져옵니다 bugfix
.
예를 들어, git rebase master bugfix
잘못되었습니다. 범위 <start>
로는 <end>
모든 커밋을 포함하는 일 feature
의 상단에 재생된다 master
:
A--B--F--G master
\ \
\ C'--D'--E'--H'--I' bugfix
\
C--D--E feature
우리가 실제로 원하는 것은에서 커밋의 범위 feature
에 bugfix
상단에 재생 될 master
. 이것이 바로 --onto
"시작"분기와 다른 "재생"대상을 지정하는 것입니다.
git rebase --onto master feature bugfix
A--B--F--G master
\ \
\ H'--I' bugfix
\
C--D--E feature