Поиск по сайту:

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

Связано: Перебазирование Git: все, что вам нужно знать

Статьи по данной тематике: