Когда использовать git branch --track (что означает начало "смотреть вверх по течению")?
До недавнего времени я не знал о --track
переключиться на git branch
, Я прочитал документацию и попробовал эту команду, но она не имеет смысла для меня.
--track
При создании новой ветви настройте
branch.<name>.remote
а такжеbranch.<name>.merge
записи конфигурации, чтобы пометить начальную точку ветви как "восходящую" от новой ветви. Эта конфигурация скажет git показать связь между двумя ветвями вgit status
и мерзавецbranch -v
, Кроме того, он направляетgit pull
без аргументов, чтобы вытащить из апстрима, когда новая ветка извлечена.Это поведение по умолчанию, когда отправной точкой является ветвь удаленного отслеживания. Установите для переменной конфигурации branch.autoSetupMerge значение
false
если ты хочешьgit checkout
а такжеgit branch
всегда вести себя так, как будто --no-track были даны. Установите этоalways
если вам нужно такое поведение, когда отправной точкой является локальная или удаленная ветвь отслеживания.
Я вижу, что люди относятся к этому коммутатору, когда хотят сделать ветвь отслеживания ветки вверх по течению
Что это значит? Это я или это описание переключателя сбивает с толку. Когда я использую термин upstream
Я имею в виду другой удаленный репо (форк), в который я могу внести изменения.
Что происходит, когда я начинаю отслеживать удаленную ветку? Как это проявляется локально?
2 ответа
Восходящая ветвь ветви или отслеживаемая удаленная ветвь - это просто ветка, с которой вы будете взаимодействовать по умолчанию при использовании git pull
а также git push
команды.
Вытягивая ветку в свою, вы можете сделать это явно:
git pull origin the_branch
Это принесет пульт origin
затем объединить origin/the_branch
в вашу текущую ветку.
Если вы используете тянуть всегда одну и ту же ветку, установив ветку upstream, вы можете просто запустить git pull
:
git branch --set-upstream-to origin/the_branch
git pull
По умолчанию, когда вы запускаете новую ветку с удаленной ветки, git добавляет ее как ветку upstream:
git checkout -b origin/the_branch
# Is equivalent to
git branch --track the_branch origin/the_branch
git checkout the_branch
При нажатии это почти то же самое.
Конфиг push.default
определит ветку по умолчанию, которую нужно нажать при использовании git push
без параметров.
Со значением upstream
, это просто подтолкнет в восходящую ветку.
Со значением по умолчанию simple
, он будет делать то же самое, но только если имена локальных и восходящих ветвей совпадают.
Я позволю вам взглянуть на документ, чтобы проверить другие возможности конфигурации.
Вы можете увидеть текущие восходящие ветви всех ваших веток, используя -vv
переключатель:
$ git branch -vv
* my_branch 33f2d4c [origin/mybranch] a useful commit
master 3ed8e99 [origin/master] Merge
the_branch dbbb8c0 [origin/the_branch] commit on the branch
Восходящая ветвь ветви также может быть передана с помощью @{upstream}
ссылка:
$ git rev-parse --symbolic-full-name --abbrev-ref @{upstream}
origin/the_branch
Толкающая ветвь как эквивалент @{push}
(это будет так же, как @{upstream}
в 99% случаев использования):
$ git rev-parse --symbolic-full-name --abbrev-ref @{push}
origin/the_branch
Различие между @{upstream}
а также @{push}
предназначен для случаев, когда вы используете треугольный рабочий процесс: вы извлекаете данные из проекта "вверх по течению", доступного только для чтения (обычно это пульт, вызываемый по соглашению) upstream
) и нажмите на доступное для записи хранилище.
Это случай рабочего процесса разветвления, используемого в GitHub.
Я сделал (французский) пост в блоге об этом, вот переведенная версия.
Вы устанавливаете локальную ветвь для отслеживания удаленной, когда хотите связать то, что вы делаете локально, с тем, что происходит удаленно.
То есть git будет знать, где искать изменения, когда вы делаете git pull
или же git fetch
, Если кто-то еще подтолкнул некоторые коммиты в удаленную ветку, и вы делаете git status
он скажет вам, что вы некоторые коммиты за пультом. Или, если вы сделали какие-то коммиты на вашем локальном компьютере, он скажет вам, что вы делаете некоторые коммиты впереди удаленного
Пример вывода git status
:
On branch develop
Your branch is behind 'origin/develop' by 19 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Как вы можете видеть, это полезно при работе с большим количеством людей в одной отрасли, так как вы всегда можете быть в курсе того, что они делают, и поддерживать свою работу в актуальном состоянии.