Каковы различия между git pull
и git fetch
?
git
version-control
git-pull
git-fetch
pupeno
источник
источник
git fetch; git reset --hard origin/master
частью нашего рабочего процесса. Он сносит локальные изменения, держит вас в курсе событий, но мастер гарантирует, что вы не просто добавите новые изменения поверх текущих изменений и создадите беспорядок. Мы использовали его некоторое время, и на практике это выглядит намного безопаснее. Просто убедитесь, что вы добавили / зафиксировали / спрятали любую незавершенную работу в первую очередь!Ответы:
Проще говоря,
git pull
делаетgit fetch
сопровождаемыйgit merge
.Вы можете
git fetch
в любое время обновить свои ветки удаленного отслеживания вrefs/remotes/<remote>/
.Эта операция никогда не изменяет ни одну из ваших локальных веток в разделе
refs/heads
и безопасна без изменения вашей рабочей копии. Я даже слышал о людях, бегущихgit fetch
периодически в фоновом режиме (хотя я бы не рекомендовал это делать).git pull
- это то, что вы должны сделать, чтобы обновлять локальную ветвь своей удаленной версии, а также обновлять другие ветки удаленного отслеживания.Git документация - git pull :
источник
git pull
всегда будет сливаться с текущей веткой . Таким образом , вы выбираете какую ветвь вы хотите , чтобы вытащить из , и она тянет его в текущую ветку. Из ветви могут быть локальными или удаленными; это может быть даже удаленная ветка, которая не зарегистрированаgit remote
(то есть вы передаете URL-адрес вgit pull
командной строке)./home/alice/
и делаюgit fetch /home/bob
, какие параметры я должен передать последующимgit merge
?pull
самом деле нельзя подражатьfetch
плюсу amerge
. Я только что получил изменение, при котором изменяется только указатель удаленной ветви, иmerge
отказывается что-либо делать.pull
с другой стороны, быстро переходит к моей ветви отслеживания.Когда вы используете
pull
, Git пытается автоматически выполнить вашу работу за вас. Он чувствителен к контексту , поэтому Git объединит любые извлеченные коммиты с веткой, в которой вы сейчас работаете.pull
Автоматически объединяет коммиты, не давая вам предварительно просмотреть их . Если вы не управляете своими филиалами, вы можете столкнуться с частыми конфликтами.Когда вы
fetch
, Git собирает любые коммиты из целевой ветки, которых нет в вашей текущей ветке, и сохраняет их в вашем локальном репозитории . Однако он не объединяет их с вашей текущей веткой . Это особенно полезно, если вам нужно регулярно обновлять хранилище, но вы работаете над тем, что может сломаться, если вы обновите свои файлы. Чтобы интегрировать коммиты в вашу основную ветку, вы используетеmerge
.источник
git fetch
обновляет только ваш.git/
каталог (AKA: локальный репозиторий) и ничего снаружи.git/
(AKA: рабочее дерево). Это не меняет ваши местные филиалы, и это не касаетсяmaster
также.remotes/origin/master
Хотя это касается (см.git branch -avv
). Если у вас есть больше пультов, попробуйтеgit remote update
. Этоgit fetch
для всех пультов в одной команде..git/refs/remotes/origin/
..git
? Какова предполагаемая выгода и что я должен делать после этого?Важно противопоставить философию дизайна git философии более традиционного инструмента управления версиями, такого как SVN.
Subversion был спроектирован и построен с использованием модели клиент / сервер. Существует один репозиторий, который является сервером, и несколько клиентов могут получить код с сервера, поработать с ним, а затем передать его обратно на сервер. Предполагается, что клиент всегда может связаться с сервером, когда ему нужно выполнить операцию.
Git был разработан для поддержки более распределенной модели без необходимости в центральном хранилище (хотя вы, безусловно, можете использовать ее, если хотите). Кроме того, git был спроектирован так, что клиент и «сервер» не должны быть в сети одновременно. Git был разработан для того, чтобы люди по ненадежной ссылке могли обмениваться кодом даже по электронной почте. Можно работать полностью отключенным и записывать CD для обмена кодом через git.
Для поддержки этой модели git поддерживает локальный репозиторий с вашим кодом, а также дополнительный локальный репозиторий, который отражает состояние удаленного репозитория. Сохраняя копию удаленного репозитория локально, git может выяснить, какие изменения необходимы, даже если удаленный репозиторий недоступен. Позже, когда вам нужно будет отправить изменения кому-то еще, git может передать их как набор изменений с момента времени, известного удаленному хранилищу.
git fetch
это команда, которая говорит «привести мою локальную копию удаленного хранилища в актуальное состояние».git pull
говорит «перенесите изменения в удаленный репозиторий туда, где я храню свой собственный код».Обычно
git pull
это делается для того,git fetch
чтобы обновить локальную копию удаленного хранилища, а затем объединить изменения с собственным хранилищем кода и, возможно, с вашей рабочей копией.Нужно помнить, что на вашей рабочей станции часто есть как минимум три копии проекта. Одна копия - это ваш собственный репозиторий с собственной историей коммитов. Вторая копия - ваша рабочая копия, где вы редактируете и строите. Третья копия - это ваша локальная «кэшированная» копия удаленного хранилища.
источник
remoteName/
Git с нуля очень хорошо читаются. Как только вы получите представление о том , как работает Git - и это красиво просто , на самом деле - все просто имеет смысл.Вот изображение Оливера Стила о том, как все это сочетается :
Если есть достаточный интерес, я думаю, я мог бы обновить изображение, чтобы добавить
git clone
иgit merge
...источник
git clone
иgit merge
будет очень полезно!git merge
- он должен четко показывать, чтоmerge
вызываемый по отдельности НЕ является тем же, что и вызывающий,pull
потому чтоpull
объединяется только с удаленного и игнорирует ваши локальные коммиты в вашей локальной ветке, которая отслеживает удаленную ветку, из которой извлекается.Один из вариантов использования
git fetch
- следующее расскажет вам о любых изменениях в удаленной ветке с момента вашего последнего извлечения ... так что вы можете проверить перед выполнением фактического извлечения, которое может изменить файлы в вашей текущей ветке и рабочей копии.См .: https://git-scm.com/docs/git-diff относительно синтаксиса с двумя и тремя точками в команде diff
источник
git diff ..origin
?git diff ...origin
эквивалентноgit diff $(git-merge-base HEAD origin) origin
(см.git diff [--options] <commit>...<commit> [--] [<path>…]
раздел kernel.org/pub/software/scm/git/docs/git-diff.html#_description ), которое отличается отgit diff origin
;git diff ...origin
это концептуально изменения, внесенныеorigin
с тех пор, как разветвленная текущая ветвьorigin
, аgit diff origin
также включает в себя обратную сторону изменений, внесенных в текущую ветвь с тех пор, как она разветвляетсяorigin
.git diff origin/master
работает, как упомянуто нижеМне стоило немного понять, в чем разница, но это простое объяснение.
master
в вашем localhost есть ветка.Когда вы клонируете репозиторий, вы извлекаете весь репозиторий на свой локальный хост. Это означает, что в то время у вас есть указатель источника / мастера,
HEAD
а мастер указывает на то же самоеHEAD
.когда вы начинаете работать и делаете коммиты, вы переводите главный указатель на
HEAD
+ ваши коммиты. Но указатель источника / мастера все еще указывает на то, что было, когда вы клонировали.Так что разница будет:
git fetch
он просто извлечет все изменения в удаленном хранилище ( GitHub ) и переместит указатель origin / master наHEAD
. Тем временем ваш местный руководитель филиала будет продолжать указывать, где он находится.git pull
, он в основном извлечет (как объяснено ранее) и объединит любые новые изменения в вашей основной ветке и переместит указатель наHEAD
.источник
git fetch
нужно было буквально загружать изменения на удаленном репо в ваше локальное репо, но НЕ фиксировать их, то есть их все равно нужно добавлять / фиксировать в вашем локальном репо.Иногда помогает визуальное представление.
источник
git pull
оно пропускает выборку, что, конечно, неточно.кратко
git fetch
похоже,pull
но не сливается. то есть он получает удаленные обновления (refs
иobjects
), но ваш локальный остается прежним (то естьorigin/master
обновляется, ноmaster
остается тем же).git pull
срывается с пульта и мгновенно сливается.Больше
git clone
клонирует репо.git rebase
сохраняет данные из вашей текущей ветки, которые не находятся в ветке upstream, во временную область. Ваша ветка теперь такая же, как и до того, как вы начали свои изменения. Таким образом,git pull -rebase
будет выполнять удаленные изменения, перематывать вашу локальную ветку, воспроизводить изменения поверх текущей ветки один за другим, пока вы не будете в курсе.Кроме того,
git branch -a
покажет вам точно, что происходит со всеми вашими филиалами - локальными и удаленными.Этот пост был полезен:
Разница между git pull, git fetch и git clone (и git rebase) - Майк Пирс
и крышки
git pull
,git fetch
,git clone
иgit rebase
.====
ОБНОВИТЬ
Я думал, что обновлю это, чтобы показать, как вы на самом деле используете это на практике.
Обновите локальное хранилище с удаленного компьютера (но не объединяйте):
После загрузки обновлений давайте посмотрим на различия:
Если вы довольны этими обновлениями, то объедините:
Ноты:
На шаге 2: Для получения дополнительной информации о различиях между локальным и удаленным, см .: Как сравнить локальную ветку git с ее удаленной веткой?
На шаге 3: Вероятно, более точно (например, в быстро меняющемся репо) сделать
git rebase origin
здесь. См. Комментарий Джастина Ома в другом ответе.Смотрите также: http://longair.net/blog/2009/04/16/git-fetch-and-merge/
источник
git clone
. Я поместил подсказку в кавычки, так как я предполагаю, что это будет означать, какой бы мастер ни был, и что кто-то будет «скачать как zip» с github.comВы бы потянули, если хотите, чтобы истории были объединены, вы извлекли бы, если бы вы просто «хотели кодировать», так как кто-то помечал некоторые статьи здесь.
источник
git fetch
он выбирает изменения из хранилища и обновляет вашу локальную удаленную ветку. Это не влияет на вашу локальную ветку, которая отслеживает локальную удаленную ветку, поэтому не влияет на вашу рабочую копию. Теперь, когда вы сделаете a,merge
он объединит извлеченные изменения с вашей локальной веткой.Вы можете получить из удаленного хранилища, увидеть различия, а затем вытащить или объединить.
Это пример для удаленного хранилища с именем
origin
и ветви, которая называетсяmaster
отслеживанием удаленной ветвиorigin/master
:источник
Короткий и простой ответ: за
git pull
ним простоgit fetch
следуетgit merge
.Очень важно отметить , что
git pull
будет автоматически сливаться , нравится ли вам это или нет . Это может, конечно, привести к конфликтам слияния. Допустим, ваш пульт есть,origin
а ваша ветвь естьmaster
. Если вы,git diff origin/master
прежде чем вытащить, вы должны иметь некоторое представление о потенциальных конфликтах слияния и могли бы подготовить ваш местный филиал соответственно.В дополнение к вытягиванию и подталкиванию, некоторые рабочие процессы включают
git rebase
, например, этот, который я перефразирую из связанной статьи:Если вы окажетесь в такой ситуации, у вас может возникнуть искушение
git pull --rebase
. Если вы действительно, действительно не знаете, что делаете, я бы посоветовал против этого. Это предупреждение соman
страницы дляgit-pull
версии2.3.5
:источник
git pull --rebase
что-то не так в данной ситуации, правильно ли это делать в два этапа? Если это правильно, какая польза от этого в два этапа?rebase
когда вы работаете в локальной ветке, которая еще не нажата. Если вы работаете над веткой, которая существует на удаленном компьютере, этоrebase
может привести к некоторым неприятным проблемам, поэтому вы должны предпочесть регулярнуюmerge
.Хорошо , вот некоторая информация о,
git pull
иgit fetch
, таким образом, вы можете понять реальные различия ... в нескольких простых словах fetch получает последние данные, но не изменения кода и не собирается связываться с вашим текущим локальным кодом ветви, но потяните get код меняется и объедините его с вашей локальной веткой, читайте дальше, чтобы получить более подробную информацию о каждом из них:мерзкий выбор
Он загрузит все ссылки и объекты и любые новые ветви в ваш локальный репозиторий ...
мерзавец
Это применяет изменения от удаленного к текущей ветви в локальном ...
Я также создаю изображение ниже, чтобы показать вам, как
git fetch
и какgit pull
работать вместе ...источник
Это интерактивное графическое представление очень помогает в понимании Git: http://ndpsoftware.com/git-cheatsheet.html
git fetch
просто «загружает» изменения с удаленного в ваш локальный репозиторий.git pull
загружает изменения и объединяет их с вашей текущей веткой. Msgstr "В режиме по умолчаниюgit pull
это сокращение, заgit fetch
которым следуетgit merge FETCH_HEAD
".источник
Бонус:
Говоря о pull & fetch в приведенных выше ответах, я хотел бы поделиться интересным трюком:
git pull --rebase
Эта команда является самой полезной в моей жизни Git, которая сэкономила много времени.
Перед отправкой ваших новых коммитов на сервер, попробуйте эту команду, и она автоматически синхронизирует последние изменения на сервере (с выборкой + слиянием) и поместит ваш коммит наверху в git log. Не нужно беспокоиться о ручном вытягивании / слиянии.
Найти подробности на: http://gitolite.com/git-pull--rebase
источник
git pull
иgit pull --rebase
?Мне нравится иметь некоторое визуальное представление о ситуации, чтобы понять эти вещи. Может быть, другие разработчики тоже захотят это увидеть, так что вот мое дополнение. Я не совсем уверен, что все правильно, поэтому, пожалуйста, прокомментируйте, если вы обнаружите какие-либо ошибки.
Некоторые основные преимущества наличия удаленного зеркала пульта:
источник
git pull
также не выполняется слияние, то есть переход к рабочей копии?Я тоже боролся с этим. На самом деле я попал сюда с поиском в Google точно такого же вопроса. Чтение всех этих ответов, наконец, нарисовало картину в моей голове, и я решил попытаться разобраться в этом, глядя на состояние 2 репозиториев и 1 песочницы и действий, выполненных с течением времени, во время просмотра их версии. Итак, вот что я придумала. Пожалуйста, поправьте меня, если я что-то напутал.
Три репо с выборкой:
Три репо с тягой
Это помогло мне понять, почему выборка очень важна.
источник
Различие между GIT Fetch и GIT Pull может быть объяснено следующим сценарием: (Помня, что картинки говорят громче, чем слова !, я представил графическое представление)
Давайте рассмотрим пример, когда вы работаете над проектом с членами вашей команды. Таким образом, они будут одной основной ветвью проекта, и все участники должны подключить ее к своему локальному репозиторию, а затем поработать в этой локальной ветке, чтобы модифицировать / добавить модули и затем вернуться в основную ветку.
Таким образом, Исходное состояние двух ветвей при раздвоенном основном проекте на локальное хранилище будет как this- (
A
,B
иC
модули уже завершены проект)Теперь вы уже начали работу над новым модулем (предположим
D
) , и когда вы завершилиD
модуль , который вы хотите , чтобы подтолкнуть его к главной ветви, но тем , что происходит в том , что один из ваших товарищей по команде разработал новый модульE
,F
и модифицированаC
.Итак, теперь произошло то, что в вашем локальном репозитории не хватает первоначального прогресса проекта, и, таким образом, отсылка ваших изменений в основную ветку может привести к конфликту и вызвать
D
сбой в работе вашего модуля .Чтобы избежать таких проблем и работать параллельно с первоначальным прогрессом проекта, есть два пути:
1. Git Fetch - это загрузит все изменения, которые были внесены в проект origin / main branch, которых нет в вашей локальной ветке. И будет ждать, пока команда Git Merge применит изменения, которые были извлечены в ваш репозиторий или филиал.
Теперь вы можете внимательно следить за файлами, прежде чем объединять их с вашим хранилищем. И вы также можете изменить
D
при необходимости из-за измененияC
.2. Git Pull - Это обновит вашу локальную ветвь с источником / главной веткой, то есть фактически то, что она делает, это комбинация Git Fetch и Git слияния друг за другом. Но это может привести к возникновению конфликтов, поэтому рекомендуется использовать Git Pull с чистой копией.
источник
Мы просто говорим:
Если вы запускаете
git pull
, вам не нужно объединять данные с локальными. Если вы запускаетеgit fetch
, это означает, что вы должны запускатьgit merge
для получения последней версии кода на локальном компьютере. В противном случае локальный машинный код не будет изменен без слияния.Так что в Git Gui, когда вы делаете выборку, вы должны объединить данные. Сама Fetch не будет вносить изменения в ваш локальный код. Вы можете проверить это при обновлении кода, выбрав один раз fetch и увидев; код не изменится. Тогда вы сливаетесь ... Вы увидите измененный код.
источник
git pull == git fetch + git merge
:)git pull --rebase = git fetch + git rebase
git fetch
загружает код с удаленного сервера в ваши ветви отслеживания в вашем локальном хранилище. Если ваш пульт имеет имяorigin
(по умолчанию), то эти ветви будутorigin/
, напримерorigin/master
, внутриorigin/mybranch-123
и т. Д. Это не ваши текущие ветви, а локальные копии этих веток с сервера.git pull
делает,git fetch
но затем также сливает код из ветви отслеживания в вашу текущую локальную версию этой ветви. Если вы еще не готовы к этим изменениям, простоgit fetch
сначала.источник
git fetch
будет извлекать удаленные ветви, чтобы вы моглиgit diff
илиgit merge
их с текущей веткой.git pull
запустит fetch на удаленной ветке, отслеживаемой текущей веткой, а затем объединит результат. Вы можете использовать,git fetch
чтобы увидеть, есть ли какие-либо обновления в удаленной ветви без необходимости объединять их с вашей локальной веткой.источник
Git Fetch
Вы загружаете изменения в свою локальную ветку от источника до получения. Fetch запрашивает у удаленного репо все коммиты, сделанные другими, но у вас нет локального репо. Fetch загружает эти коммиты и добавляет их в локальный репозиторий.
Git Merge
Вы можете применить изменения, загруженные через fetch, используя команду merge. Merge примет коммиты, полученные из fetch, и попытается добавить их в вашу локальную ветку. Объединение сохранит историю изменений ваших локальных изменений, поэтому, когда вы поделитесь своей веткой с помощью push, Git будет знать, как другие могут объединить ваши изменения.
Git Pull
Выборка и слияние выполняются вместе достаточно часто, поэтому создается команда, которая объединяет два элемента, pull. Pull выполняет выборку, а затем объединение, чтобы добавить загруженные коммиты в вашу локальную ветку.
источник
Единственная разница между
git pull
иgit fetch
заключается в том, что:git pull
тянет из удаленной ветки и сливает ее.git fetch
только извлекает из удаленной ветки но не сливаетто есть git pull = git fetch + git merge ...
источник
rm -rf
и начал все сначала. Глупый мерзавец, пожалуйста, просто дай мне знать, чтобы я мог вернуться к работе?Проще говоря, если вы собираетесь сесть на самолет без подключения к Интернету ... перед отъездом вы можете просто сделать
git fetch origin <master>
. Он будет загружать все изменения на ваш компьютер, но держать его отдельно от вашей локальной разработки / рабочей области.В самолете вы можете внести изменения в свое локальное рабочее пространство, а затем объединить его с тем, что вы получили, и разрешить все возможные конфликты объединения без подключения к Интернету. И если кто-то не внес новые противоречивые изменения в удаленный репозиторий, то, как только вы прибудете в пункт назначения, вы сделаете это
git push origin <branch>
и отправитесь за кофе.Из этого удивительного учебника Atlassian :
С
git pull
:git merge
.git fetch
где она влияет только на.git/refs/remotes
, мерзавец тянуть будет влиять как ваш.git/refs/remotes
и.git/refs/heads/
Хм ... так что, если я не обновляю рабочую копию
git fetch
, то где я делаю изменения? Где Git выбирает новые коммиты?Отличный вопрос Он помещает его куда-то изолированно от вашей рабочей копии. Но опять же где? Давайте выясним.
В каталоге вашего проекта (то есть, где вы делаете свои
git
команды) выполните:ls
, Это покажет файлы и каталоги. Ничего крутого, я знаю.Теперь делай
ls -a
. Это покажет точечные файлы , то есть файлы , начинающиеся с.
вы затем сможете увидеть каталог с именем:.git
.cd .git
. Это, очевидно, изменит ваш каталог.ls
. Вы увидите список каталогов. Мы ищемrefs
. Естьcd refs
.heads
иremotes
. Используйте,cd
чтобы проверить внутри них тоже.git fetch
что вы делаете, будет обновлять элементы в/.git/refs/remotes
каталоге. Это не будет ничего обновлять в/.git/refs/heads
каталоге.git pull
сначала сделаетgit fetch
, обновит элементы в/.git/refs/remotes
каталоге, затем объединится с вашим локальным, а затем изменит заголовок внутри/.git/refs/heads
каталога.Очень хороший ответ на этот вопрос также можно найти в разделе Где размещается «git fetch»? ,
Кроме того, ищите «Слеш нотацию» из поста соглашения о наименовании веток Git . Это поможет вам лучше понять, как Git размещает вещи в разных каталогах.
Чтобы увидеть реальную разницу
Просто делать:
Если удаленный мастер был обновлен, вы получите следующее сообщение:
Если вы этого не сделали
fetch
и сделали,git checkout master
то ваш местный мерзавец не знал бы, что добавлено 2 коммита. И было бы просто сказать:Но это устаревшее и неправильное. Это потому, что git даст вам обратную связь исключительно на основе того, что он знает. Он не обращает внимания на новые коммиты, которые еще не снесены ...
Есть ли способ увидеть новые изменения, сделанные в удаленном режиме при локальной ветке?
Некоторые IDE (например, XCode) очень умны и используют результат a
git fetch
и могут комментировать строки кода, которые были изменены в удаленной ветви вашей текущей рабочей ветви. Если эта строка была изменена как локальными изменениями, так и удаленной ветвью, то эта строка помечается красным. Это не конфликт слияния. Это потенциальный конфликт слияния. Это headps, который вы можете использовать для разрешения будущего конфликта слияния, прежде чем делать этоgit pull
из удаленной ветви.Интересный совет:
Если вы загрузили удаленную ветку, например, сделали:
Тогда это будет идти в ваш каталог удаленных. Это все еще не доступно для вашего локального каталога. Тем не менее, это упрощает вашу проверку в этой удаленной ветви с помощью DWIM (делайте то, что я имею в виду):
вам больше не нужно делать:
Подробнее об этом читайте здесь
источник
Git позволяет применять хронологически более старые коммиты после новых коммитов. Из-за этого процесс передачи коммитов между репозиториями делится на два этапа:
Копирование новых коммитов из удаленной ветви в копию этой удаленной ветви внутри локального репо.
(репо к операции репо)
master@remote >> remote/origin/master@local
Интеграция новых коммитов в локальный филиал
(операция внутреннего репо)
remote/origin/master@local >> master@local
Есть два способа сделать шаг 2. Вы можете:
В
git
терминологии шаг 1 естьgit fetch
, шаг 2 этоgit merge
илиgit rebase
git pull
этоgit fetch
иgit merge
источник
Git получает ветку последней версии с удаленного на локальный с помощью двух команд:
git fetch: Git собирается получить последнюю версию с удаленной на локальную, но она не объединяется автоматически.
git fetch origin master
git log -p master..origin/master
git merge origin/master
Приведенные выше команды означают, что вы загружаете последнюю версию основной ветви из источника из удаленной в исходную главную ветку. А затем сравнивает локальную главную ветку и главную ветку происхождения. Наконец, слияние.
git pull: Git собирается получить последнюю версию с пульта и слиться с локальной.
git pull origin master
Команда выше эквивалентна
git fetch
иgit merge
. На практике,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 pull на самом деле является командой
shortcut
for git fetch, за которой следует команда git merge или команда git rebase, в зависимости от вашей конфигурации. Вы можете настроить свой Git-репозиторий так, чтобы git pull представлял собой выборку с последующей ребазой.источник
Простое графическое представление для начинающих,
Вот,
будет извлекать код из репозитория и перезагружать его с вашим локальным ... в git pull есть возможность создания новых коммитов.
но в ,
мерзкий выбор
будет извлекать код из хранилища, и нам нужно перебазировать его вручную, используя
git rebase
Например: я собираюсь получить от мастера сервера и перебазировать его в моем локальном мастере.
1) git pull (ребаз будет выполнен автоматически):
здесь origin - ваш удаленный репо, master - ваша ветка
2) git fetch (нужно перебазировать вручную):
он будет получать изменения сервера от источника. и это будет в вашем местном, пока вы не сделаете это самостоятельно. нам нужно исправить конфликты вручную, проверив коды.
это перебазирует код в локальный. перед этим убедитесь, что вы находитесь в правильном направлении.
источник
На самом деле Git поддерживает копию вашего собственного кода и удаленного хранилища.
Команда
git fetch
обновляет локальную копию, получая данные из удаленного хранилища. Причина, по которой мы нуждаемся в этом, заключается в том, что кто-то еще мог внести некоторые изменения в код, и вы хотите постоянно обновляться.Команда
git pull
переносит изменения в удаленном репозитории туда, где вы храните свой собственный код. Обычноgit pull
это делается сначала путем «git fetch», чтобы обновить локальную копию удаленного репозитория, а затем объединяет изменения в вашем собственном репозитории кода и, возможно, в вашей рабочей копии.источник