Когда использовать 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)

Как вы можете видеть, это полезно при работе с большим количеством людей в одной отрасли, так как вы всегда можете быть в курсе того, что они делают, и поддерживать свою работу в актуальном состоянии.

Другие вопросы по тегам