Programing

git pull과 git pull --rebase의 차이점

lottogame 2020. 3. 21. 10:10
반응형

git pull과 git pull --rebase의 차이점


나는 git을 언젠가 다시 사용하기 시작했고 복잡성을 완전히 이해하지 못했습니다. 내 기본적인 질문은 여기의 차이 발견하는 것입니다 git pullgit pull --rebase가산하기 때문에, --rebase매우 뭔가 다른 일을하지 않는 것 옵션 : 단지 풀 않습니다.

차이점을 이해하도록 도와주세요.


git pull= git fetch+ git merge추적 상류 지점에 대한

git pull --rebase= git fetch+ git rebase추적 상류 지점에 대한

방법 git mergegit rebase차이점 을 알고 싶다면 이것을 읽으십시오 .


때때로 우리는 의존하는 브랜치를 리베이스 / 리와인드하는 업스트림을 가지고 있습니다. 우리가 다운 스트림 인 경우 우리에게 혼란을 야기시키는 큰 문제가 될 수 있습니다.

마술은 git pull --rebase

일반적인 git pull은 느슨하게 말하면 다음과 같습니다 (이 예제에서는 모두 origin이라는 원격과 foo라는 분기를 사용합니다).

# assume current checked out branch is "foo"
git fetch origin
git merge origin/foo

언뜻보기에는 git pull --rebase가 다음과 같이한다고 생각할 수 있습니다.

git fetch origin
git rebase origin/foo

그러나 업스트림 리베이스에 "스 쿼싱"이 포함 된 경우에는 도움이되지 않습니다 (커밋의 패치 ID가 순서가 아니라 변경되었음을 의미 함).

이것은 git pull --rebase가 그보다 약간 더 많은 일을해야한다는 것을 의미합니다. 다음은 그 기능과 방법에 대한 설명입니다.

출발점이 이것이라고 가정 해 봅시다.

a---b---c---d---e  (origin/foo) (also your local "foo")

시간이 지남에 따라 자신의 "foo"위에 커밋했습니다.

a---b---c---d---e---p---q---r (foo)

한편, 반사회적 분노에 맞서, 업스트림 관리자는 자신의 "foo"를 리베이스했을뿐만 아니라 스쿼시를 사용했습니다. 그의 커밋 체인은 다음과 같습니다 :

a---b+c---d+e---f  (origin/foo)

이 시점에서 git pull은 혼란을 초래할 것입니다. 자식 패치조차도; git rebase origin / foo는 한쪽에서 "b"와 "c"를 커밋하고 다른 쪽에서 "b + c"를 커밋하면 충돌하지 않기 때문에 잘라 내지 않습니다. (그리고 d, e, d + e와 비슷하게).

git pull --rebase이 경우에 무엇입니까 :

git fetch origin
git rebase --onto origin/foo e foo

이것은 당신에게 제공합니다 :

 a---b+c---d+e---f---p'---q'---r' (foo)

여전히 충돌이 발생할 수 있지만 실제 충돌 (p / q / r과 a / b + c / d + e / f 간)이며 b / c와 b + c와의 충돌로 인한 충돌이 아닙니다.

답변 (약간 수정) :
http://gitolite.com/git-pull--rebase


로컬 브랜치에 두 개의 커밋이 있다고 가정하십시오.

      D---E master
     /
A---B---C---F origin/master

"git pull"후 다음과 같습니다.

      D--------E  
     /          \
A---B---C---F----G   master, origin/master

"git pull --rebase"후에는 병합 지점 G가 없습니다. D와 E는 다른 커밋이됩니다.

A---B---C---F---D'---E'   master, origin/master

충돌이없는 가장 간단한 경우

  • rebase 사용 : 원격 HEAD의 맨 위에 로컬 커밋을 리베이스 하고 병합 / 병합 커밋을 만들지 않습니다.
  • 미포함 / 정상 : 병합 및 병합 커밋 생성

또한보십시오:

man git-pull

보다 정확하게는 git pull은 주어진 매개 변수로 git fetch를 실행하고 git merge를 호출하여 검색 된 분기 헤드를 현재 분기로 병합합니다. --rebase를 사용하면 git merge 대신 git rebase를 실행합니다.

참조 :
git pull --rebase는 언제 사용해야합니까?
http://git-scm.com/book/en/Git-Branching-Rebasing


Merge와 Rebase의 차이점을 이해하는 것이 중요합니다.

리베이스는 변경 사항이 계층 구조의 위쪽에서 아래쪽으로 전달되는 방식이고 병합은 변경이 위쪽으로 흐르는 방식입니다.

자세한 내용은 http://www.derekgourlay.com/archives/428을 참조하십시오 .

참고 URL : https://stackoverflow.com/questions/18930527/difference-between-git-pull-and-git-pull-rebase

반응형