Как обновить ветку в Git без переключения на неё

Предположим, вы работаете в ветке feature, а коллеги обновили master. Вам нужно подтянуть свежие изменения в локальный master, но не хочется терять контекст и переключаться туда-обратно. Стандартный git pull работает только с текущей веткой. Что делать?

Решение – специальная форма git fetch, которая обновляет указанную локальную ветку, не меняя ваше рабочее состояние.

  • <remote> – обычно origin.
  • <удалённая_ветка> – имя ветки на сервере (например, masterdevelop).
  • <локальная_ветка> – имя локальной ветки, которую вы хотите обновить.

Пример

Вы находитесь на ветке feature и хотите обновить локальный master до состояния origin/master

Локальная ветка master будет продвинута вперёд (если это возможно) до того же коммита, что и origin/master. При этом вы останетесь на ветке feature с неизменённым рабочим каталогом и индексом.

Важное ограничение

Это работает только для быстрой перемотки (fast-forward).

Если в вашем локальном master есть коммиты, которых нет в origin/master, Git откажется выполнять операцию, чтобы вы случайно не потеряли историю. Будет выдана ошибка:

В такой ситуации Git не может просто «переместить указатель» – требуется слияние или ребейз. Это сделано специально для защиты от потери данных.

Что делать, если нужна перемотка с принуждением?

Если вы абсолютно уверены, что хотите перезаписать локальную ветку (например, вы случайно закоммитили в master что-то ненужное), можно использовать принудительный вариант с плюсом перед источником:

Это заменит вашу локальную ветку master на содержимое origin/master без всяких проверок. Коммиты, которые были только в локальном master, будут потеряны. Эта команда полезна для сброса ветки до состояния, которое точно соответствует удалённой.

Этот же приём, но для локальных веток

Этот же трюк работает и для обновления одной локальной ветки из другой (без слияния, только fast-forward). Синтаксис:

Например, обновить master до текущего состояния develop (если develop содержит все коммиты master + новые):

Мало букафф? Читайте есчо !

Как изменить origin в GIT

Декабрь 11, 2020 г.

Можно зайти в настройки .git/config и поменять url источника прямо там, но предпочтительно делать это через командную строку. Origin меняется редко, давайте посмотрим как. Изначально вы задаёте связь с репо следующей командой: [crayon-6a5db9144a6d3438720138/] ...

Читать

GIT может хранить пароли

Сентябрь 30, 2017 г.

Операции с удаленным частным репозиторием требуют ввода пароля. Git может сохранять введенные пароли, чтобы не вводить их при каждой операции. Как это сделать? Во-первых, git может запомнить введенный пароль временно. Это позволит выполнить ряд ...

Читать

Как отключить отслеживание прав доступа к файлам в git

Декабрь 4, 2018 г.

GIT по умолчанию  следит за правами на запуск файлов. Чаще всего, отслеживание прав не требуется, но файлы то и дело попадают в список измененных, и далее - в коммиты. Давайте посмотрим как игнорировать смену прав доступа у файлам. К счастью, отключить ...

Читать

Git pull с передачей логина и пароля

Декабрь 11, 2021 г.

Репозиторий почти всегда требует реквизитов доступа. И, если вы их не храните в локальной конфигурации, то скрипты, содержащие git pull, будут прерываться, запрашивая пару логин/пароль. Передать реквизиты с отдельным ключом нельзя, но можно задать ...

Читать
 

Комментарии к «Как обновить ветку в Git без переключения на неё»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: