При сотрудничестве с коллегами или даже когда вы просто используете библиотеку с открытым исходным кодом, вам часто нужно получить ветку из удаленного репозитория с помощью Git.
«Базовый вариант» для выборки ветки довольно прост, но, как и в случае со многими другими операциями Git, он может сбивать с толку, когда вводятся другие ограничения, и вам нужно начать использовать один из множества доступных вариантов. В этой статье я попытаюсь пролить свет на команды, которые необходимо выполнить, и на часто используемые параметры.
Как правило, вам нужно выполнить эту последовательность:
$ git fetch <remote-repo> <remote-branch>:<local-branch>
$ git checkout <local-branch>
Команда fetch
извлечет интересующую вас удаленную ветку и все
связанные объекты и ссылки, сохраняя их в новой локальной ветке,
которую вы указали аргументом <local-branch>
.
Как только все будет загружено из удаленного репозитория, вы можете проверить его, чтобы проверить и поиграть с кодом.
Если у вас есть только одно удаленное репо, вы можете опустить все
аргументы для git fetch
, который будет извлекать все ветки и
обновления, а затем запустить git checkout <branch-name>
поскольку все
удаленные ветки уже есть в вашей системе.
Учитывая, как работает
fetch , приведенный
выше пример команды получит весь код в интересующей вас ветке, но не
повлияет ни на одну из ваших локальных веток, поскольку с fetch
ничего
не объединяется.
Часто вам нужно, чтобы ваша новая локальная ветвь отслеживала удаленную,
что помогает легко извлекать и отправлять изменения. Для этого вы должны
использовать параметр --track
с командой checkout
, которая
одновременно проверяет ветку и отслеживает ее с помощью удаленной
ветки. Вот как бы это выглядело:
$ git checkout --track <remote-repo>/<remote-branch>
Это создаст локальную ветку с тем же именем, что и удаленная.
Если вы хотите преобразовать удаленную ветку в локальную, но с другим
именем, вам необходимо включить параметр -b
для создания новой
локальной ветки:
$ git checkout --track -b <local-branch> <remote-repo>/<remote-branch>
На практике это будет выглядеть примерно так:
$ git checkout --track -b fix-144 origin/bug-144
Branch fix-144 set up to track remote branch bug-144 from origin.
Switched to a new branch 'fix-144'
Чтобы убедиться, что ваша новая ветка отслеживает удаленную ветку,
запустите команду branch
с параметром -vv
:
$ git branch -vv
* fix-144 0774548 [origin/bug-144] Fix #144
master dc538f6 [origin/master] 4.16.4
Если вам интересно узнать, как работает код Git, ознакомьтесь с проектом Initial Commit.