В чем разница между «git pull» и «git fetch»? - PullRequest
11016 голосов
/ 15 ноября 2008

Примечание модератора: Учитывая, что на этот вопрос уже отправлено шестьдесят семь ответов (некоторые из них удалены), подумайте, действительно ли вы добавив что-нибудь новое перед публикацией другого.

В чем различия между git pull и git fetch?

Ответы [ 40 ]

69 голосов
/ 14 июля 2016

Git Fetch

Вы загружаете изменения в свою локальную ветку от источника до получения. Fetch запрашивает у удаленного репо все коммиты, сделанные другими, но у вас нет локального репо. Fetch загружает эти коммиты и добавляет их в локальный репозиторий.

Git Merge

Вы можете применить изменения, загруженные через fetch, используя команду merge. Merge примет коммиты, полученные из fetch, и попытается добавить их в вашу локальную ветку. Слияние сохранит историю изменений ваших локальных изменений, поэтому, когда вы поделитесь своей веткой с помощью push, Git будет знать, как другие могут объединить ваши изменения.

Git Pull

Выборки и слияния выполняются вместе достаточно часто, чтобы была создана команда, которая объединяет два элемента, pull. Pull выполняет выборку, а затем объединение, чтобы добавить загруженные коммиты в вашу локальную ветку.

49 голосов
/ 04 июня 2013

Единственная разница между git pull и git fetch заключается в том, что:

git pull извлекает из удаленного филиала и объединяет его.

git fetch извлекается только из удаленной ветви, но не сливается

т.е.. git pull = git fetch + git merge ...

43 голосов
/ 28 ноября 2013

Git позволяет применять хронологически более старые коммиты после новых коммитов. Из-за этого акт передачи коммитов между репозиториями делится на два этапа:

  1. Копирование новых коммитов из удаленной ветви в копию этой удаленной ветви внутри локального репо.

    (операция репо) 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

35 голосов
/ 12 августа 2014

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 может быть более безопасным, потому что перед объединением мы можем увидеть изменения и решить, следует ли объединить.

35 голосов
/ 19 мая 2015

В чем разница между git pull и git fetch?

Чтобы понять это, вам сначала нужно понять, что ваш локальный git поддерживает не только ваш локальный репозиторий, но и локальную копию удаленного репозитория.

git fetch обновляет локальную копию удаленного хранилища. Например, если вашим удаленным репозиторием является GitHub, вы можете извлечь любые изменения, сделанные в удаленном репозитории, в свою локальную копию этого удаленного репозитория. Это позволит вам выполнять такие операции, как сравнение или слияние.

git pull, с другой стороны, внесет изменения в удаленный репозиторий туда, где вы храните свой собственный код. Как правило, git pull сначала выполняет git fetch, чтобы обновить локальную копию удаленного репозитория, а затем объединит изменения в вашем собственном репозитории кода и, возможно, в вашей рабочей копии.

32 голосов
/ 20 сентября 2013

git pull == (git fetch + git merge)

git fetch не изменяется для локальных веток.

Если у вас уже есть локальный репозиторий с удаленной настройкой для нужного проекта, вы можете получить все ветви и теги для существующего удаленного устройства, используя git fetch. ... Fetch не вносит никаких изменений в локальные ветви, поэтому вам нужно объединить удаленную ветку с парной локальной веткой, чтобы включить новые изменения выборки. от GitHub

31 голосов
/ 29 июля 2015

Пытается быть ясным и простым.

Команда git pull на самом деле является shortcut для git fetch , за которым следует git merge или git rebase в зависимости от вашей конфигурации. Вы можете настроить свой Git-репозиторий так, чтобы git pull представлял собой выборку с последующей перебазировкой.

31 голосов
/ 13 сентября 2015

На самом деле Git поддерживает копию вашего собственного кода и удаленный репозиторий.

Команда git fetch обновляет локальную копию, получая данные из удаленного хранилища. Причина, по которой мы нуждаемся в этом, заключается в том, что кто-то еще мог внести некоторые изменения в код, и вы хотите постоянно обновляться.

Команда git pull переносит изменения в удаленном репозитории туда, где вы храните свой собственный код. Обычно git pull делает это, выполняя сначала «git fetch», чтобы обновить локальную копию удаленного репозитория, а затем объединяет изменения в вашем собственном репозитории кода и, возможно, в рабочей копии.

30 голосов
/ 12 июля 2015
git pull = git fetch + git merge 
29 голосов
/ 12 июля 2017

Простое графическое представление для начинающих,

enter image description here

здесь

git pull  

будет извлекать код из репозитория и перезагружать с вашим локальным ... в git pull есть возможность создания новых коммитов.

но в,

git fetch

будет извлекать код из хранилища, и нам нужно перебазировать его вручную, используя git rebase

Например: я собираюсь получить от мастера сервера и перебазировать его в моем локальном мастере.

1) git pull (ребаз будет выполнен автоматически):

git pull origin master

здесь origin ваш удаленный репо master ваш филиал

2) git fetch (нужно перебазировать вручную):

git fetch origin master

будет получать изменения сервера от источника. и это будет в вашем местном, пока вы не сделаете это самостоятельно. нам нужно исправить конфликты вручную, проверив коды.

git rebase origin/master

это перебазирует код в локальный. перед этим убедитесь, что вы находитесь в правильном направлении.

...