sourcetip

git pull과 git pull의 차이 -- 기본값

fileupload 2023. 5. 13. 10:44
반응형

git pull과 git pull의 차이 -- 기본값

저는 얼마 전부터 git를 사용하기 시작했고 그 복잡성을 완전히 이해하지 못합니다.여기서 제 기본적인 질문은 다음과 같은 차이점을 찾는 것입니다.git pull그리고.git pull --rebase를 추가한 이후로--rebase옵션은 매우 다른 것을 하는 것처럼 보이지 않습니다. 단지 당기기만 합니다.

차이점을 이해할 수 있도록 도와주세요.

git pull + 업스트림 분기 추적에 반대합니다.git fetch

git pull --rebase + 업스트림 분기 추적에 반대합니다.git fetch

방법을 알고 싶다면,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가 단순한 순서가 아닌 변경되었음을 의미)을 수반하는 경우에는 도움이 되지 않습니다.

즉, 기트 풀 -- 베이스는 그 이상의 일을 해야 한다는 것입니다.이것은 무엇을 어떻게 하는지에 대한 설명입니다.

시작점은 다음과 같습니다.

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 fetch; gitrebase 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와 충돌하여 발생하는 충돌 등이 아닙니다.

(약간 수정된) 답변:
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 위에 재배치하고 병합/합병 커밋을 만들지 않습니다.
  • without/normal: 병합하고 병합 커밋을 만듭니다.

참고 항목:

man git-pull

보다 정확하게는 git pull 실행 git fetch와 git merge를 호출하여 검색된 분기 헤드를 현재 분기에 병합합니다.--rebase를 사용하면 git 병합 대신 gitrebase를 실행합니다.

참고 항목:
pull git pull --rebase는 ?
http://git-scm.com/book/en/://git-scm.com/book/en/Git-Branching-Rebasing

병합과 기본 재배치의 차이를 이해하는 데 중요합니다.

기본 재배치는 변경사항이 계층 맨 위에서 아래로 전달되는 방식이고 병합은 위쪽으로 다시 전달되는 방식입니다.

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

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

반응형