В одной из последних статей мы узнали о команде Git push. Команда Git push перемещает изменения, внесенные пользователями в их локальном репозитории, в удаленный репозиторий. Кроме того, передача изменений в удаленный репозиторий позволяет всей команде сотрудничать и делиться своей работой. Но это была одна сторона истории, когда пользователи перенесли свои локальные изменения в удаленный репозиторий. С другой стороны, все остальные члены команды должны синхронизировать эти изменения из удаленного репозитория в свой локальный репозиторий. Поэтому для этого члены команды должны извлечь изменения и объединить их в своем локальном репозитории. В этой статье мы рассмотрим Git Fetch и Git Merge, я покажу, как пользователи могут синхронизировать изменения из удаленного репозитория в свой локальный репозиторий.
Что такое команда Git Fetch?
Команда Git fetch помогает пользователю загружать коммиты, ссылки и файлы из удаленного репозитория в локальный репозиторий. Другими словами, выполнение этой команды поможет вам увидеть все обновления в удаленном репозитории. Вы можете подумать, а что, если вы не хотите сохранить изменения? Что ж, эта команда нисколько не повредит вашему рабочему репозиторию.
Git fetch — это отличный способ стоять в месте, откуда вы можете видеть изменения и решать, хотите ли вы сохранить их или отказаться от них.
Как использовать команду Git Fetch?
Прежде чем использовать эту команду, давайте внесем некоторые изменения в наш удаленный репозиторий, чтобы мы могли извлечь их через локальный репозиторий.
Читайте также: Подключение локального репозитория к удаленному репозиторию GitHub
Выполните следующие действия в своей учетной записи GitHub:
- Во-первых, откройте свою учетную запись GitHub и перейдите в репозиторий.
- Во-вторых, откройте Readme.md файл.
- В-третьих, нажмите значок редактирования, чтобы отредактировать файл.
- В-четвертых, отредактируйте описание файла.
- После этого прокрутите вниз, зафиксируйте изменения и нажмите кнопку commit changes (зафиксировать изменения).
- Изменения будут отражены в файле README.md.
Теперь, когда у нас есть некоторые изменения в удаленном репозитории, мы должны получить их в нашей локальной рабочей копии репозитория.
- Откройте Git bash и перейдите в свой рабочий каталог.
- Проверьте наличие чистого рабочего репозитория (никаких зафиксированных изменений).
- Наконец, выполните команду в Git Bash: git fetch
Последние две строки означают:
https://<repo_url> : URL-адрес репозитория.
e7b37f6..47b2bf6 : первый хэш-это хэш последней объединенной фиксации в локальном репозитории, а 47b2bf6-это новый хэш-код фиксации/изменения из удаленного репозитория.
Пользователь также может проверить коммиты и недавние действия с помощью команды git log.
Если на вашем экране отображается аналогичный вывод, как показано на рисунке выше, вы успешно извлекли изменения из удаленного хранилища.
Параметры команды Git Fetch
Как и любая другая команда в Git, команда Git fetch также содержит некоторые параметры для быстрого и эффективного использования команды. Давайте обсудим их ниже:
All
Опция all извлекает все удаленные ссылки, файлы и т. д.
git fetch –all
Dry Run
Dry Run покажет пользователю, как команда будет выполняться без внесения каких-либо изменений.
git fetch –dry-run
Что такое команда Git Merge?
Команда Git merge — это решение включить изменения, которые вы увидели с помощью команды Git fetch. Как только пользователь будет готов принять изменения из удаленного хранилища, он сможет объединить эти изменения в локальное хранилище. Как следует из названия, вы подтверждаете merge (слияние) этих изменений.
Изображение ниже может помочь прямо описать значение Git Merge.
Извлечение изменений, выполненных на удаленном компьютере, происходит с помощью команды fetch, а затем, если пользователь одобряет их, они объединяются с локальным репозиторием.
Как использовать команду Git Merge?
Чтобы объединить изменения, полученные в предыдущем разделе, выполните следующую команду:
git merge
Если вы видите такой же результат, значит, вы успешно объединили изменения в своем локальном репозитории. На приведенном выше изображении третья строка показывает написанное Fast-forward (перемотка вперед). Это происходит потому, что это fast-forward merge (быстрое слияние), выполняемое git. Давайте посмотрим, что это такое.
Fast-Forward Merge
Fast-Forward Merge (быстрое слияние) в Git означает, что существует линейный путь от ветви, который отклоняется от ветви, к которой вы сливаетесь. Линейный путь означает, что не было никаких коммитов к главной ветви с тех пор, как ветвь объекта перешла в точку слияния.
На приведенном выше рисунке показано, что ветвь была отклонена, сделала три коммита, и за это время в главной ветви не было коммитов (зеленые точки). После трех коммитов я объединю ветвь функции в главную ветвь, что приведет к быстрой перемотке вперед.
Читайте также: Первый коммит в Git (git commit)
Параметры в Git Merge
–no-ff
Опция –no-ff предотвращает слияние изменений git в ускоренной перемотке вперед.
git merge –no-ff
–no-commit
Опция no-commit не будет автоматически фиксировать слияние git и будет запрашивать вмешательство пользователя для завершения.
git merge –no-commit
В слиянии git есть еще много вариантов, которые вы можете изучить и опробовать в локальном репозитории. Git, будучи системой контроля версий, гарантирует, что истории коммитов этих отдельных ветвей остаются отдельными даже после завершения операции слияния. Слияние Git происходит после выборки изменений, то есть производительность выборки Git уже имеет место. Но есть способ обойти этот двухэтапный процесс и преобразовать его в один шаг. Он известен как pulling (вытягивание)в Git, и команда Git pull выполняет его. Более подробно рассмотрим эту команду в одной из следующих статей.
Частые вопросы
Что отличает git fetch и git pull?
Команда git fetch и команда git pull отличаются друг от друга по работе. Git fetch извлекает изменения, в то время как git pull объединяет их после извлечения. Таким образом, в некотором смысле git fetch является частью git pull, поскольку он сначала извлекает изменения, а затем выполняет git merge.
Могу ли я отменить изменения, внесенные git merge?
Да, в Git слияние изменений может повернуть вспять с помощью следующих действий. Определите коммит, к которому вы хотите вернуться с помощью команды git reflog. Выполните жесткий сброс вместе с хэшем фиксации с помощью git reset –hard <hash>.