git pull과 git pull --rebase의 차이점
나는 git을 언젠가 다시 사용하기 시작했고 복잡성을 완전히 이해하지 못했습니다. 내 기본적인 질문은 여기의 차이 발견하는 것입니다 git pull
및 git pull --rebase
가산하기 때문에, --rebase
매우 뭔가 다른 일을하지 않는 것 옵션 : 단지 풀 않습니다.
차이점을 이해하도록 도와주세요.
git pull
= git fetch
+ git merge
추적 상류 지점에 대한
git pull --rebase
= git fetch
+ git rebase
추적 상류 지점에 대한
방법 git merge
과 git 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
'Programing' 카테고리의 다른 글
AngularJS에서 속성을 조건부로 적용하는 가장 좋은 방법은 무엇입니까? (0) | 2020.03.21 |
---|---|
Lisp 매크로를 그렇게 특별하게 만드는 것은 무엇입니까? (0) | 2020.03.21 |
인수를 전달하여 다른 Python 스크립트에서 Python 스크립트를 실행하십시오. (0) | 2020.03.21 |
Bootstrap 3을 사용하여 AngularJS에서 그리드 또는 테이블을 나타내는 가장 좋은 방법은 무엇입니까? (0) | 2020.03.21 |
C #에서 스택 추적을 잃지 않고 InnerException을 다시 발생시키는 방법은 무엇입니까? (0) | 2020.03.21 |