2013-03-24 6 views

답변

32

fetch (git fetch)입니다. 먼저 upstream/master이 업데이트됩니다.

처음 upstream/master으로 업데이트하지 않고 을 리베이스하면과 같은 결과를 얻지 못할 것입니다.

나는


SnakEgit 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/mastergit fetch에서 pull --rebase 명령을 찾을 시도 달라

의 상단에 재생하는 지역입니다 그것들은 이전에 가져온 것에서 상류에서 왔었습니다.

이렇게하려면 원격 추적 분기 (이 경우 origin/master)의 reflog를 확인합니다. 이 reflog는 origin에서 연속적인 git fetch 작업의 팁을 "가장 최근의 첫 번째"순서로 나타냅니다.

reflog 항목마다 (origin/[email protected]{1}, ...{2} 등) 해당 커밋이 현재 분기 헤드 master의 조상인지 확인합니다. 하나를 찾자마자 rebase의 시작점으로 사용합니다 (위 예제에서 B).

+10

그래서'git pull --rebase upstream master '는'git fetch upstream & git rebase upstream/master'와 유사합니까? – Dennis

+0

@Dennis 꽤 많이, 네. – VonC

+2

사실 아니요. 상상해 보시라. 당신이 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