문제

사회자 노트: 는 이 질문은 이미 sixty-seven 답변 게시 그것은(그 중 일부를 삭제),고려할지 여부를 에 기여 새로운 아무것도 게시하기 전에 또 다른 하나입니다.

의 차이점이 무엇이 git pullgit fetch?

도움이 되었습니까?

해결책

간단히 말해서, git pullgit fetch 다음 git merge.

당신이 할 수 있는 git fetch 를 업데이트하기 위해 언제든지 귀하의 원격 추적이 분기에 refs/remotes/<remote>/.

이 작업은 결코 변하지 않는 어떤 자신의 지역 지점에서 refs/heads, 고 안전하게 변경하지 않고 작동을 복사본입니다.나는 심지어 들었을 실행하는 사람들 git fetch 에서 주기적으로 cron 작업에서 배경(지만 나는 권장하지 않습니다 이).

A git pull 은 당신이 무엇을 할 것을 가지고 지역 지점은 그대로--날짜와 그 원격 버전하는 동안,또한 업데이트하는 다른 원격 추적을 가지입니다.

Git 문서– git pull:

기본 모드에서 git pull 기 위한 간단한 방법입 git fetch 다음 git merge FETCH_HEAD.

다른 팁

  • 당신이 사용할 때 pull, git은 당신을 위해 당신의 일을 자동으로 시도합니다. 상황에 민감합니다, 따라서 Git은 현재 일하고있는 지점에 당겨진 커밋을 병합합니다. pull 커밋을 먼저 검토하지 않고 자동으로 통합합니다.. 지점을 면밀히 관리하지 않으면 빈번한 갈등이 발생할 수 있습니다.

  • 때를 fetch, git은 현재 지점에 존재하지 않는 대상 지점에서 커밋을 수집하고 로컬 저장소에 저장합니다. 하지만, 현재 지점과 합병하지 않습니다. 이는 저장소를 최신 상태로 유지해야하지만 파일을 업데이트 할 때 파손될 수있는 작업을 수행하는 경우 특히 유용합니다. 커밋을 마스터 브랜치에 통합하려면 사용합니다. merge.

GIT의 디자인 철학을 SVN과 같은보다 전통적인 소스 제어 도구의 철학과 대조하는 것이 중요합니다.

전복은 클라이언트/서버 모델로 설계 및 구축되었습니다. 서버 인 단일 리포지토리가 있으며 여러 클라이언트가 서버에서 코드를 가져와 작업 한 다음 서버에 다시 커밋 할 수 있습니다. 클라이언트가 작업을 수행해야 할 때 항상 서버에 연락 할 수 있다고 가정합니다.

GIT는 중앙 저장소가 필요없는보다 분산 모델을 지원하도록 설계되었습니다 (원하는 경우 확실히 사용할 수 있지만). 또한 GIT는 클라이언트와 "서버"가 동시에 온라인 상태 일 필요가 없도록 설계되었습니다. Git은 신뢰할 수없는 링크의 사람들이 이메일을 통해 코드를 교환 할 수 있도록 설계되었습니다. GIT를 통해 완전히 연결이 끊어지고 CD를 교환 코드로 태울 수 있습니다.

이 모델을 지원하기 위해 GIT는 코드와 함께 로컬 리포지토리와 원격 저장소 상태를 반영하는 추가 로컬 저장소를 유지합니다. 원격 저장소의 사본을 로컬로 유지함으로써 Git은 원격 저장소에 도달 할 수없는 경우에도 필요한 변경 사항을 파악할 수 있습니다. 나중에 다른 사람에게 변경 사항을 보내야 할 때 GIT는 알려진 시점에서 원격 저장소로의 변경 세트로 전송할 수 있습니다.

  • git fetch "원격 저장소의 로컬 사본을 최신 상태로 가져 오십시오"라는 명령입니다.

  • git pull "원격 저장소의 변경 사항을 내 자신의 코드를 보관하는 위치로 가져옵니다."

보통 git pull 이 작업을 수행하여 수행합니다 git fetch 원격 저장소의 로컬 사본을 최신 상태로 가져온 다음 변경 사항을 자신의 코드 저장소 및 작업 사본으로 병합합니다.

테이크 아웃은 적어도 종종 세 사본 워크 스테이션의 프로젝트. 하나의 사본은 자신의 커밋 기록을 가진 자신의 저장소입니다. 두 번째 사본은 편집 및 구축중인 작업 사본입니다. 세 번째 사본은 원격 저장소의 로컬 "캐시 된"사본입니다.

여기에 있습니다 Oliver Steele의 모든 것이 어떻게 결합되는지에 대한 이미지:

enter image description here

관심이 충분하다면 이미지를 업데이트 할 수 있다고 생각합니다. git clone 그리고 git merge...

하나의 사용 사례 git fetch 다음은 마지막으로 당기기 이후 원격 브랜치의 변경 사항을 알려주는 것입니다. 따라서 실제 풀을 수행하기 전에 확인할 수 있습니다. 이는 현재 분기 및 작업 사본의 파일을 변경할 수 있습니다.

git fetch
git diff ...origin

차이점이 무엇인지 이해하는 데 약간의 비용이 들지만 이것은 간단한 설명입니다. master 당신의 로컬 호스트에는 지점이 있습니다.

저장소를 복제하면 전체 저장소를 로컬 호스트에게 가져옵니다. 이것은 그 당시에 원산지/마스터 포인터가 있음을 의미합니다. HEAD 그리고 마스터가 같은 것을 가리키고 있습니다 HEAD.

일을 시작하고 노력하면 마스터 포인터를 전진시킵니다. HEAD + 당신의 커밋. 그러나 원산지/마스터 포인터는 여전히 복제 된 시점을 가리키고 있습니다.

차이점은 다음과 같습니다.

  • 당신이 할 경우 git fetch 원격 저장소의 모든 변경 사항을 가져옵니다 (github) 그리고 원점/마스터 포인터를 이동하십시오 HEAD. 한편 현지 지사 마스터는 어디에 있는지 계속 지적합니다.
  • 당신이 할 경우 git pull, 그것은 기본적으로 (앞에서 설명한대로) 새로운 변경 사항을 마스터 브랜치로 병합하고 포인터를 이동합니다. HEAD.

때로는 시각적 표현이 도움이됩니다.

enter image description here

간단히

git fetch 비슷하다 pull 그러나 합쳐지지 않습니다. 즉, 원격 업데이트를 가져옵니다 (refs 그리고 objects) 그러나 당신의 지역은 동일하게 유지됩니다 (즉 origin/master 업데이트되지만 master 동일하게 유지).

git pull 리모컨에서 내려와 즉시 합쳐집니다.

git clone 레포를 클론합니다.

git rebase 상류 지점에 있지 않은 현재 지점에서 임시 영역으로 물건을 저장합니다. 당신의 지점은 이제 당신이 당신의 변경을 시작하기 전과 동일합니다. 그래서, git pull -rebase 원격 변경 사항을 아래로 내리고 현지 지점을 되 감고 최신 지점의 상단을 하나씩 재생합니다.

또한, git branch -a 현지 및 원격으로 모든 지점에서 무슨 일이 일어나고 있는지 정확하게 보여줄 것입니다.

이 블로그 게시물은 유용했습니다.

Git Pull, Git Fetch 및 Git Clone (및 Git Rebase)의 차이 -Mike Pearce

그리고 덮개 git pull, git fetch, git clone 그리고 git rebase.

====

업데이트

실제로 이것을 실제로 어떻게 사용하는지 보여주기 위해 이것을 업데이트 할 것이라고 생각했습니다.

  1. 리모컨에서 로컬 리포를 업데이트합니다 (그러나 병합하지 마십시오).

    git fetch 
    
  2. 업데이트를 다운로드 한 후 차이점을 보자.

    git diff master origin/master 
    
  3. 해당 업데이트에 만족하면 병합하십시오.

    git pull
    

메모:

2 단계 : 로컬 및 리모컨 간의 차이에 대한 자세한 내용은 다음을 참조하십시오. 로컬 git 브랜치를 원격 지점과 비교하는 방법은 무엇입니까?

3 단계 : 아마도 더 정확할 것입니다 (예 : 빠르게 변화하는 저장소에서) git rebase origin 여기. 보다 @justin 옴 댓글 또 다른 대답으로.

또한보십시오: http://longair.net/blog/2009/04/16/git-petch-and-merge/

git-pull - Fetch from and merge with another repository or a local branch
SYNOPSIS

git pull   …
DESCRIPTION

Runs git-fetch with the given parameters, and calls git-merge to merge the 
retrieved head(s) into the current branch. With --rebase, calls git-rebase 
instead of git-merge.

Note that you can use . (current directory) as the <repository> to pull 
from the local repository — this is useful when merging local branches 
into the current branch.

Also note that options meant for git-pull itself and underlying git-merge 
must be given before the options meant for git-fetch.

당신은 당신이 역사를 병합하기를 원한다면 당기는 것입니다. 어떤 사람이 여기에 일부 기사를 태그하고 있기 때문에 'codez를 원한다면'만 가져올 것입니다.

원격 저장소에서 가져와 차이점을보고 당기거나 병합 할 수 있습니다.

이것은 호출 된 원격 저장소의 예입니다 origin 그리고 지점이 부릅니다 master 원격 브랜치 추적 origin/master:

git checkout master                                                  
git fetch                                        
git diff origin/master
git rebase origin master

짧고 쉬운 대답은 그 것입니다 git pull 간단합니다 git fetch 그 뒤에 git merge.

그것을 주목하는 것이 매우 중요합니다 git pull ~ 할 것이다 당신이 그것을 좋아하든 아니든 자동으로 병합합니다. 물론 이것은 합병 충돌을 초래할 수 있습니다. 당신의 리모컨이라고 가정 해 봅시다 origin 그리고 당신의 지점입니다 master. 만약 너라면 git diff origin/master 당기기 전에 잠재적 인 병합 충돌에 대한 아이디어가 있어야하며 그에 따라 지역 지점을 준비 할 수 있습니다.

당기고 밀고, 일부 워크 플로 관련시키다 git rebase, 링크 된 기사에서 제가 말하는 것과 같은 것과 같은 것 :

git pull origin master
git checkout foo-branch
git rebase master
git push origin foo-branch

그러한 상황에서 자신을 찾으면 유혹을받을 수 있습니다. git pull --rebase. 당신이 정말로, 당신이 무엇을하고 있는지 알지 않는 한, 나는 그것에 대해 조언 할 것입니다. 이 경고는 man 페이지 git-pull, 버전 2.3.5:

이것은 잠재적으로 위험한 운영 모드입니다. 그것은 역사를 다시 작성합니다.이 역사를 이미 출판했을 때 잘 어울리지 않습니다. Git-Rebase (1)를주의 깊게 읽지 않는 한이 옵션을 사용하지 마십시오.

OK, 여기에 대한 일부 정보 git pullgit fetch, 다,그래서 당신이 이해할 수 있는 실제적인 차이점이...에 몇 가지 간단한 단어, 을 얻는 최신 데이터,하지만 코드를 변경하지 않은 엉망으로 현재 지점 코드 코드 변경을 병 귀하의 지역 지점에 읽기에 대한 자세한 정보를 얻으려면 각각:

git fetch

그것을 모두 다운로드 refs 그리고 어떤 새로운 지점을 로컬 저장소...

가 지점 및/또는 태그(통칭하여"심판")에서 하나 이상 기타 저장소와 함께하는 개체를 완료하는 데 필요한 그들의 역사입니다.원격 추적을 가지 업데이트(설명을 참조하십시오 아래 방법을 이 동작을 제어).

기본적으로,어떤 태그를 포인트로 기록되고 있는 페이 또한 반;효과를 가져오는 태그는 지점에서 가지는 당신은 당신에 관심이 있습니다.이 기본 동작을 사용하여 변경할 수 있습 tags 나--no-태 옵션 또는 의 구성 원격..tagOpt.를 사용하여 refspec 를 가져오는 태그를 명시적으로 을 가져올 수 있습니다 태그하지 않는 지점으로 가지 당신이 관심이 에서뿐만 아니라.

git fetch 가져올 수 있습니다에서 하나의 이름 저장소 또는 URL,or 에서 여러 저장소에서는 경우에 한 번은 주어지고 있다 였습니다.설정 파일에 있는 항목.(Git-config1).

지 않을 때 원격을 지정하여 기본 원격을 것입 사용되지 않는 한,거류지점에 대해 구성된 현재 니다.

의 이름을 심판하는 반지와 함께,객체 이름 그들이 지점을 기록됩니다.git/FETCH_HEAD.이 정보 에 의해 사용되는 스크립트나 다른 git 명령과 같은 git pull.


git pull

그것은 변경 사항을 적용합니다터 현재점 지방...

통합 변경에서 원격 저장소의 현재 지점에 있습니다.기본 모드에서,git pull 기 위한 간단한 방법입 git fetch 다음 git merge FETCH_HEAD.

더 정확하게,git pull 실행 git fetch 으로 지정된 매개 변수 전화 git merge 를 병합하는 지점 검색 머리로 현재 니다.와--리베이스,실행 git 은 리베이스는 대신 git merge.

해야의 이름을 원격 저장소에 전달되는 것으로 git fetch1.명할 수 있는 임의의 원격 ref(예를 들어, 태그 이름)또는 수집의 심판 해당하는 원격 추적을 가지(예를 들어,refs/헤/:refs/리모컨/원산지/), 그러나 일반적으로 그것의 이름은 지점에서 원격 저장소에 있습니다.

기본값이고에서 읽 "원격"과"merge"구성에 대한 현재의 지점에 의해 설정 git-지--트랙에 있습니다.


또한 만들기 visual 아래 방법을 보여주 git fetchgit pull 함께 작동하는...

git pull and git fetch

enter image description here

이 대화식 그래픽 표현은 스터 탱크 git에 매우 도움이됩니다. http://ndpsoftware.com/git-cheatsheet.html

git fetch 리모컨에서 로컬 저장소로의 변경 사항 만 "다운로드"합니다. git pull 변경 사항을 다운로드하여 현재 지점으로 통합합니다. "기본 모드에서 git pull 속기입니다 git fetch 그 뒤에 git merge FETCH_HEAD."

보너스:

위의 답변에서 Pull & Fetch에 대해 이야기하면서 흥미로운 트릭을 공유하고 싶습니다.

git pull --rebase

위의 명령은 내 Git Life에서 가장 유용한 명령으로 많은 시간을 절약했습니다.

새 커밋을 서버로 푸시하기 전에이 명령을 시도하면 최신 서버 변경 (Fetch + Merge와 함께)을 자동으로 동기화하고 커밋이 Git 로그의 상단에 배치됩니다. 수동 풀/병합에 대해 걱정할 필요가 없습니다.

세부 사항 찾기 : http://gitolite.com/git-pull-rebase

나는 이러한 것들을 파악하기 위해 상황을 시각적으로 표현하는 것을 좋아합니다. 어쩌면 다른 개발자들도 그것을보고 싶을 것입니다. 나는 그것이 모든 것이 정확하다는 것을 완전히 확신하지 못하므로 실수를 찾으면 언급하십시오.

                                         LOCAL SYSTEM
                  . =====================================================    
================= . =================  ===================  =============
REMOTE REPOSITORY . REMOTE REPOSITORY  LOCAL REPOSITORY     WORKING COPY
(ORIGIN)          . (CACHED)           
for example,      . mirror of the      
a github repo.    . remote repo
Can also be       .
multiple repo's   .
                  .
                  .
FETCH  *------------------>*
Your local cache of the remote is updated with the origin (or multiple
external sources, that is git's distributed nature)
                  .
PULL   *-------------------------------------------------------->*
changes are merged directly into your local copy. when conflicts occur, 
you are asked for decisions.
                  .
COMMIT            .                             *<---------------*
When coming from, for example, subversion, you might think that a commit
will update the origin. In git, a commit is only done to your local repo.
                  .
PUSH   *<---------------------------------------*
Synchronizes your changes back into the origin.

리모컨의 미러를 가져 오는 데있어 몇 가지 주요 장점은 다음과 같습니다.

  • 성능 (네트워크를 통해 짜내려고하지 않고 모든 커밋과 메시지를 스크롤하십시오)
  • 피드백 로컬 리포의 상태에 대해 (예를 들어, Atlassian의 Sourcetree를 사용합니다. 이는 원점에 비해 미리 또는 뒤에 커밋되는지를 나타내는 전구를 제공합니다.이 정보는 Git Fetch로 업데이트 될 수 있습니다).

나는 이것도 고투했다. 사실 나는 똑같은 질문에 대한 Google 검색으로 여기에 도착했습니다. 이 모든 답변을 읽는 것은 마침내 내 머리에 그림을 그렸고 나는 2 개의 리포지토리와 1 개의 샌드 박스의 상태를보고 시간이 지남에 따라 수행 된 1 개의 샌드 박스 및 행동을 보려고 노력했다. 그래서 여기 내가 생각해 낸 것입니다. 내가 어디에도 엉망이된다면 저를 바로 잡으십시오.

페치가있는 세 가지 저장소 :

---------------------     -----------------------     -----------------------
- Remote Repo       -     - Remote Repo         -     - Remote Repo         -
-                   -     - gets pushed         -     -                     -
- @ R01             -     - @ R02               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Repo        -     - Local Repo          -     - Local Repo          -
- pull              -     -                     -     - fetch               -
- @ R01             -     - @ R01               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
- Checkout          -     - new work done       -     -                     -
- @ R01             -     - @ R01+              -     - @R01+               -
---------------------     -----------------------     -----------------------

풀이있는 세 개의 저장소

---------------------     -----------------------     -----------------------
- Remote Repo       -     - Remote Repo         -     - Remote Repo         -
-                   -     - gets pushed         -     -                     -
- @ R01             -     - @ R02               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Repo        -     - Local Repo          -     - Local Repo          -
- pull              -     -                     -     - pull                -
- @ R01             -     - @ R01               -     - @ R02               -
---------------------     -----------------------     -----------------------

---------------------     -----------------------     -----------------------
- Local Sandbox     -     - Local Sandbox       -     - Local Sandbox       -
- Checkout          -     - new work done       -     - merged with R02     -
- @ R01             -     - @ R01+              -     - @R02+               -
---------------------     -----------------------     -----------------------

이것은 왜 페치가 중요한지 이해하는 데 도움이되었습니다.

의 차이 GIT FetchGIT Pull 설명될 수 있 다음과 같은 시나리오:(염두에 두는 말보다!, 내가 제공한 그림 표현)

예를 들어 보자고 있는 프로젝트에서 작업으로 귀하의 팀 구성원입니다.그래서 그들의 하나가 될 것입니다 주점의 프로젝트의 모든 참가자 포크 그것은 자신의 로컬 저장소한 다음 작업에 지점을 수정/추가 모듈을 누르면 다음을 지점에 있습니다.

그래서, 초기 상태 의 두 가지 경우 당기 중 주요 프로젝트에 로컬 저장소는 다음과 같이 될 것이다-(A, BC 은 모듈을 이미 완료 프로젝트의)

enter image description here

지금,당신은 작업을 시작에 새로운 모듈(정 D 다)및 완료되면 D 모듈을 밀어하는 주요지점,그러나 그 사이에 무슨 일이 하나의 팀 동료가 개발된 새로운 모듈 E, F 과정 C.
그래서 이제 무슨 일이 있었는지 귀하의 로컬 저장소가 부족한 뒤 원래의 프로젝트의 진행하고 따라서 밀의 변경사항을 본점생할 수 있습 충돌을 일으킬 수 있습니다 당신의 모듈 D 을 수 있습니다.

enter image description here

를 이러한 문제를 해결하기 위해 그 일을 병행으로 원래의 진행 상황의 프로젝트를 자신의 두 가지 방법이 있습니다:

1.Git Fetch- 이 다운로드한 모든 변경 사항을 기원/주요 프로젝트는 지점에 존재하지 않는 지역의 지점.하고 기다릴 것이 Git Merge 적용하는 명령의 변경이 있는 경우는 변경을 가져 귀하의 저장소 또는 지점에 있습니다.

enter image description here

그래서 이제 당신은 신중하게 모니터링하기 전에 파일을 병합하여 저장소에 있습니다.고 수정할 수도 있습니다 D 필요한 경우 때문에 수정 C.

enter image description here

2.Git Pull- 이 것입 업데이트를 귀하의 지역 지점 근원/주요지점,즉실제로 그것이 무엇을 조합의 Git Fetch 및 Git 병합니다.하지만 이 충돌을 일으킬 수 있 발생하는,그래서 그 사용을 권장 Git Pull 깨끗한 복사합니다.

enter image description here

우리는 단순히 말합니다 :

git pull == git fetch + git merge

당신이 달리면 git pull, 데이터를 로컬에 병합 할 필요가 없습니다. 당신이 달리면 git fetch, 그것은 당신이 달려야한다는 것을 의미합니다 git merge 로컬 컴퓨터에 최신 코드를 가져 오기 위해. 그렇지 않으면 로컬 머신 코드는 병합없이 변경되지 않습니다.

따라서 Git Gui에서는 가져 오면 데이터를 병합해야합니다. Fetch 자체는 로컬에서 코드를 변경하지 않습니다. 한 번 가져 와서 확인하여 코드를 업데이트 할 때 확인할 수 있습니다. 코드는 변경되지 않습니다. 그러면 합병 ... 변경된 코드가 표시됩니다.

git fetch 원격 서버에서 로컬 저장소의 추적 브랜치로 코드를 끌어 내립니다. 리모컨 인 경우 origin (기본값) 그러면이 지점은 origin/, 예를 들어 origin/master, origin/mybranch-123, 이들은 현재의 지점이 아닙니다. 현지의 서버에서 해당 지점의 사본.

git pull a git fetch 하지만 또한 추적 분기에서 코드를 해당 지점의 현재 로컬 버전으로 병합합니다. 아직 변경 준비가되지 않았다면 git fetch 첫 번째.

git fetch 원격 브랜치를 검색하여 가능합니다 git diff 또는 git merge 현재 지점과 함께. git pull 현재 지점에서 추적 한 원격 브라크에서 Fetch를 실행 한 다음 결과를 병합합니다. 당신이 사용할 수있는 git fetch 로컬 브랜치와 병합하지 않고 원격 지점에 업데이트가 있는지 확인하십시오.

git fetch

Origin에서 Fetch를 통해 로컬 브랜치로 변경 사항을 다운로드합니다. Fetch는 다른 사람들이 만든 모든 커밋에 대해 원격 저장소에 요청하지만 현지 리포지션에는 없습니다. 가져 오는이 커밋을 다운로드하여 로컬 리포지토리에 추가합니다.

git 합병

Merge 명령을 사용하여 Fetch를 통해 다운로드 한 변경 사항을 적용 할 수 있습니다. Merge는 가져 오기에서 검색된 커밋을 가져 와서 현지 지점에 추가하려고합니다. 병합은 지역 변경의 커밋 기록을 유지하여 지점을 푸시와 공유 할 때 Git은 다른 사람들이 어떻게 변경을 병합 할 수 있는지 알게됩니다.

git 당기기

페치와 병합은 종종 함께 실행됩니다. 둘을 결합한 명령이 만들어졌습니다. Pull은 가져온 다음 병합을 수행하여 다운로드 된 커밋을 현지 지점에 추가합니다.

유일한 차이점 git pull 그리고 git fetch 그게 :

git pull 원격 브랜치에서 당겨 합병합니다.

git fetch 원격 브랜치에서만 가져 오지만 병합되지 않습니다.

즉, git pull = git fetch + git merge ...

GIT는 최신 커밋 후 연대순으로 오래된 커밋을 적용 할 수 있도록합니다. 이로 인해 리포지토리 간의 커밋을 전송하는 행위는 두 단계로 나뉩니다.

  1. Remote Branch에서 새로운 커밋을 로컬 레포 내부 의이 원격 브랜치의 사본으로 복사합니다.

    (저장소 운영에 대한 저장소) master@remote >> remote/origin/master@local

  2. 새로운 커밋을 지역 지점에 통합합니다

    (내부 레포 운영) remote/origin/master@local >> master@local

2 단계를 수행하는 두 가지 방법이 있습니다.

  1. 마지막 공통 조상 후 포크 로컬 브랜치와 로컬 리포지토리에 고유 한 커밋에 대한 새로운 커밋을 추가하고, 커밋을 병합하여 포크를 닫습니다.
  2. 마지막 공통 조상 후 새로운 커밋을 삽입하고 현지 저장소에 고유 한 커밋을 다시 적용하십시오.

~ 안에 git 용어, 1 단계는입니다 git fetch, 2 단계입니다 git merge 또는 git rebase

git pull ~이다 git fetch 그리고 git merge

GIT는 두 개의 명령을 사용하여 리모컨에서 로컬로 최신 버전의 지점을 얻습니다.

  1. Git Fetch : Git은 원격에서 로컬로 최신 버전을 얻을 수 있지만 자동으로 병합되지는 않습니다.git fetch origin master git log -p master..origin/master git merge origin/master

    위의 명령은 원격에서 원산지 마스터 브랜치까지 원산지에서 메인 브랜치의 최신 버전을 다운로드한다는 것을 의미합니다. 그런 다음 로컬 마스터 브랜치와 원산지 마스터 브랜치를 비교합니다. 마지막으로 병합.

  2. Git Pull : Git은 리모컨에서 최신 버전을 얻고 로컬로 병합 할 예정입니다.

        git pull origin master

    위의 명령은 동일합니다 git fetch 그리고 git merge. 실제로, git fetch 병합 전에 변경 사항을보고 병합 여부를 결정할 수 있기 때문에 더 안전합니다.

차이점은 무엇입니까? git pull 그리고 git fetch?

이를 이해하려면 먼저 로컬 GIT가 로컬 저장소뿐만 아니라 원격 저장소의 로컬 사본을 유지한다는 것을 이해해야합니다.

git fetch 원격 저장소의 로컬 사본을 최신 상태로 제공합니다. 예를 들어, 원격 저장소가 GitHub 인 경우 원격 저장소의 변경 사항을 원격 저장소의 로컬 사본으로 가져올 수 있습니다. 이를 통해 비교 또는 병합과 같은 작업을 수행 할 수 있습니다.

git pull 반면에 원격 저장소의 변경 사항을 자신의 코드를 보관하는 위치로 가져옵니다. 일반적으로, git pull 할 것입니다 git fetch 먼저 원격 저장소의 로컬 사본을 최신으로 가져 오면 변경 사항을 자신의 코드 저장소 및 작업 사본으로 병합합니다.

git pull == (git fetch + git merge)

Git Fetch는 지역 지점으로 변경되지 않습니다.

원하는 프로젝트를위한 원격 설정이있는 로컬 저장소가 이미있는 경우 GIT Fetch를 사용하여 기존 리모컨의 모든 분기 및 태그를 잡을 수 있습니다. ... Fetch는 지역 지점을 변경하지 않으므로 새로 페치 변경 사항을 통합하기 위해 원격 지점을 쌍을 이루는 지역 지점과 병합해야합니다. Github에서

명확하고 단순하려고 노력합니다.

그만큼 git 당기기 명령은 실제로 a입니다 shortcut ~을 위한 git fetch 그 뒤에 git 합병 아니면 그 git rebase 구성에 따라 명령. git 저장소를 구성하여 구성 할 수 있습니다 git 당기기 페치와 리바이스가 이어집니다.

실제로 GIT는 자신의 코드와 원격 저장소의 사본을 유지합니다.

명령 git fetch 원격 저장소에서 데이터를 가져 와서 로컬 사본을 최신 상태로 만듭니다. 우리가 필요한 이유는 다른 사람이 코드를 약간 변경하고 자신을 업데이트하고 싶기 때문입니다.

명령 git pull 원격 저장소의 변경 사항을 자신의 코드를 보관하는 위치로 가져옵니다. 보통, git pull 먼저 원격 저장소의 로컬 사본을 최신으로 가져 오기 위해 'git fetch'를 먼저 수행 한 다음 변경 사항을 자신의 코드 저장소 및 작업 사본으로 병합합니다.

git pull = git fetch + git merge 

초보자를위한 간단한 그래픽 표현,

enter image description here

여기,

git pull  

리포지토리에서 코드를 가져 와서 로컬과 함께 리베이스를 가져올 것입니다 ... Git Pull에서는 새로운 커밋이 생성 될 가능성이 있습니다.

하지만

git fetch

리포지토리에서 코드를 가져 오면 사용하여 수동으로 다시 제출해야합니다. git rebase

예 : 저는 서버 마스터에서 가져와 지역 마스터에서 다시 제출할 것입니다.

1) git pull (Rebase가 자동으로 완료됩니다) :

git pull origin master

여기 기원 원격 repo입니다 주인 당신의 지점입니다

2) git fetch (수동으로 다시 제출해야 함) :

git fetch origin master

원점에서 서버 변경을 가져옵니다. 그리고 그것은 당신이 스스로 다시 비제 할 때까지 당신의 지역에있을 것입니다. 코드를 확인하여 충돌을 수동으로 수정해야합니다.

git rebase origin/master

이것은 로컬로 코드를 다시 제출합니다. 그 전에 오른쪽 지점에 있는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top