git rebase upstream/master
과 git pull --rebase upstream master
사이에 차이점이 있습니까? 그렇다면 무엇이 있습니까? 원격 장치는 원격 장치 일 수 있으며 반드시 업스트림 장치는 아닙니다.git rebase 업스트림/마스터 대 git 풀 -베이스 업스트림 마스터
32
A
답변
32
은 fetch (git fetch
)입니다. 먼저 upstream/master
이 업데이트됩니다.
처음 upstream/master
으로 업데이트하지 않고 을 리베이스하면과 같은 결과를 얻지 못할 것입니다.
나는
SnakE는 git pull --rebase
이 정확히git fetch && git rebase origin/master
아니라고 in the comments 언급 "master
branch and 'origin/master
' have diverged, how to 'undiverge' branches'?"에서 그것을 보여줍니다.
- 원산지/마스터가 새로운 업데이트
origin/master
(B'
) 입니다 : 여기
git fetch origin
git rebase --onto origin/master B master
:
은 무엇 git pull --rebase
가,이 경우입니다 않는다 "what does "git pull --rebase
" do?"
(origin/master)
|
A--B--C (master)
\
B'--D (actual origin/master after changing B and force pushing)
를 참조하십시오
B
은 이전 0 (A가 업데이트 인출하기 전에)는master
은 커밋 정말 을있는 지점이 origin/master
git rebase origin/master
git fetch
에서 pull --rebase
명령을 찾을 시도 달라
의 상단에 재생하는 지역입니다 그것들은 이전에 가져온 것에서 상류에서 왔었습니다.
이렇게하려면 원격 추적 분기 (이 경우
origin/master
)의 reflog를 확인합니다. 이 reflog는origin
에서 연속적인git fetch
작업의 팁을 "가장 최근의 첫 번째"순서로 나타냅니다.reflog 항목마다 (
origin/[email protected]{1}
,...{2}
등) 해당 커밋이 현재 분기 헤드master
의 조상인지 확인합니다. 하나를 찾자마자 rebase의 시작점으로 사용합니다 (위 예제에서B
).
그래서'git pull --rebase upstream master '는'git fetch upstream & git rebase upstream/master'와 유사합니까? – Dennis
@Dennis 꽤 많이, 네. – VonC
사실 아니요. 상상해 보시라. 당신이 A-B 역사를 뽑아서 그 위에 변화를 주었다고 상상해 보라. 'A-B-C'. 그런 다음 다른 누군가가'B'''''''''''''''''를 수정하여''A'''''''''''라는 변화를 줄였습니다. 이제'git fetch && git rebase origin/master' 명령을 실행하면 리베이스가 충돌로 실패합니다. 그러나'git pull --rebase'는 그것을 알아 내고'A-B'-D-C'로 끝낼 것입니다. 어떤 마법은 카펫 아래에서'pull --rebase'에서 확실히 일어나고 있습니다. 편집 : [prooflink] (http://gitolite.com/git-pull--rebase.html) – SnakE