Git Fetch: мастер-класс
Просматривайте изменения, внесенные в удаленный репозиторий, не перетаскивая файлы в локальный репозиторий.
Ключевые выводы
Команда git fetch похожа на команду git pull, которая обновляет ваш локальный репозиторий информацией и фиксирует данные из удаленного репозитория, не перезаписывая ваши рабочие файлы.
Команда Git fetch
позволяет вам просмотреть информацию, прежде чем переходить к ней. Вы можете узнать, какие изменения были внесены в удаленный репозиторий, но не перезаписывая локальные файлы удаленными файлами.
Что такое git fetch и что он делает?
Команда fetch
в Git безопасно загружает коммиты, файлы и другую информацию из удаленного репозитория в ваш локальный репозиторий. Используйте fetch, когда хотите увидеть, какие изменения внесли другие разработчики, не принуждая их принимать эти изменения. Ваши локальные файлы остаются нетронутыми. Почему это важно?
Вы должны сохранять рассудок, когда работаете в составе команды разработчиков. Удаленный или центральный репозиторий будет содержать изменения и новые ветки, созданные другими разработчиками и отправленные в удаленный репозиторий.
Вполне возможно, что кто-то обновил удаленную копию файлов, которые вы изменили локально на своем компьютере. Если вы случайно выполните git pull
для обновления локального репозитория, вы, скорее всего, обнаружите, что сами обрабатываете слияния для изменений, которые вам, возможно, даже не нужны.
После загрузки информации вы можете просмотреть ее и увидеть, в чем заключаются изменения. Это позволяет вам сделать осознанный выбор относительно того, что вы хотите объединить прямо сейчас, если вообще хотите, а что вы хотите отложить на потом.
Git fetch против pull
Команда git fetch
ведёт себя как команда git pull
, но без шага, который перезаписывает ваши локальные файлы. Ваш локальный репозиторий обновляется и синхронизируется, но изменения не записываются в рабочее состояние вашего локального репозитория, поэтому ваши файлы остаются нетронутыми.
Или, другими словами, команда git pull
похожа на команду git fetch
, за которой сразу следует git merge
.
Синхронизируйте локальные и удаленные репозитории с помощью git fetch
Чтобы получить все обновленные метаданные и коммиты из удаленного репозитория в локальный репозиторий, используйте команду git fetch
с именем или URL-адресом удаленного репозитория. По умолчанию первый удаленный репозиторий называется «источник».
git fetch origin
Вы можете опустить слово «происхождение», если работаете с одним удаленным репозиторием.
git fetch
При этом извлекаются любые обновления из «исходного» репозитория, но не объединяются изменения в рабочие файлы. Мы видим, что для нас получена новая ветка под названием «новая ветка».
После того, как вы использовали команду fetch
, вы можете увидеть полный список ветвей на удаленном компьютере, используя опцию -r
(удаленный) с командой ветки.
git branch -r
Здесь перечислены все ветки, о которых знает удаленный компьютер, которые после fetch
также находятся в вашем локальном репозитории.
Просмотреть все полученные теги
Аналогичным образом вы можете использовать опцию tag
(обратите внимание, это «тег» без буквы «s»), чтобы просмотреть список тегов.
git tag
Сначала делаем пробный прогон
Хотя команда git fetch
не объединяет изменения с вашими рабочими файлами, она все равно обновляет ваш локальный репозиторий. Если вы хотите увидеть, какие изменения выполнит команда fetch
, не делая их на самом деле, используйте опцию --dry-run
.
git fetch --dry-run
Как получить одну ветку
Получить информацию об одной ветке легко. Добавьте имя ветки в командную строку, чтобы fetch
сообщить, что вам нужно знать только об этой одной ветке.
Здесь мы сообщаем fetch
получить ветку «mary-feature» из удаленного репозитория «origin».
git fetch origin mary-feature
Теперь, когда сведения и содержимое удаленной ветки находятся в вашем локальном репозитории, вы можете использовать команду git checkout
, чтобы создать новую ветку и извлечь удаленную ветку. Это не приведет к перезаписи существующих файлов, если вы впервые используете эту ветку.
git checkout -b mary-feature origin/mary-feature
Получить все ветки
Если вы используете несколько пультов, вы можете сэкономить время, перенеся все изменения из всех ветвей обратно в локальный репозиторий, используя параметр --all
.
git fetch --all
Сравнение локальных и удаленных веток
Чтобы увидеть, чем файлы в удаленной ветке отличаются от ваших локальных копий, используйте git fetch
, а затем команду git log
.
Обратите внимание, что локальная и удаленная ветки разделены двумя точками «..
». Опция --oneline
показывает идентификатор фиксации и сообщение о фиксации.
git fetch
git log --oneline mary-feature..origin/mary-feature
Однострочное отображение полезно, если ветка содержит большое количество изменений. Чтобы просмотреть дополнительную информацию, опустите параметр --oneline
.
git log mary-feature..origin/mary-feature
Здесь показано время и дата каждого коммита, а также сообщение о коммите и контактные данные автора изменения.
Синхронизация локального филиала с удаленным филиалом
Если вы решили, что хотите пойти дальше и объединить изменения из удаленной ветки с вашими локальными рабочими файлами, вы можете использовать эти команды.
Мы проверим ветку, чтобы убедиться, что мы работаем, это наша текущая рабочая ветка.
git checkout mary-feature
Ветка проверена для нас, и нам говорят, что она находится за удаленной версией. Мы можем использовать git pull
, чтобы обновить его, а затем git status
, чтобы проверить наш статус.
git pull
git status
Если мы внесли некоторые изменения в наши локальные файлы, Git сообщит нам, когда мы извлекаем ветку, что нам нужно будет выполнить git pull
, чтобы начать слияние.
git checkout mary-feature
Простой git pull
запускает процесс извлечения файлов и слияния, или мы можем сразу погрузиться в него и использовать сам git merge
. Начнем с проверки того, что мы работаем с правильной веткой.
git checkout mary-feature
Мы сообщим git
объединить нашу текущую ветку с веткой в удаленном репозитории. Необходимо разрешить шесть различных коммитов.
Нам нужно сообщить Git, какую удаленную ветку мы хотим объединить.
git merge origin/mary-feature
Откроется редактор, позволяющий нам предоставить сообщение о фиксации. Мы можем принять предложенное сообщение или добавить свое. Этот редактор является вашим редактором по умолчанию, если Git не настроен на использование другого редактора.
Сохраните изменения, когда будете готовы продолжить. Слияние продолжается автоматически при закрытии редактора.
Наше слияние прошло успешно, поскольку конфликтов не было.
Конфликты возникают, когда одни и те же строки кода изменяются двумя или более разработчиками. В этом случае Git отмечает конфликты в затронутом файле. Вам нужно будет просмотреть их по очереди и выбрать, какое изменение сохранить.
Необученный щенок
Как щенок на дрессировке, fetch
получит то, что вы просите, но не отбросит это. Если вам действительно нужно то, что показал вам щенок, вам нужно потянуть
.