Там нет никакой разницы вообще!
1) git checkout -b branch origin/branch
Если нет --trackи нет --no-track, --trackпредполагается по умолчанию. Значение по умолчанию можно изменить с помощью настройки branch.autosetupmerge.
В сущности, 1) ведет себя как git checkout -b branch --track origin/branch.
2) git checkout --track origin/branch
«Для удобства», --trackбез каких-либо -bпоследствий, -bи аргумент, -bпредположительно, является «ответвлением». Догадка определяется переменной конфигурации remote.origin.fetch.
В сущности, 2) ведет себя как git checkout -b branch --track origin/branch.
Как видите: без разницы.
Но это становится еще лучше:
3) git checkout branch
также эквивалентно тому, git checkout -b branch --track origin/branchесли «ветвь» еще не существует, но «происхождение / ветвь» существует 1 .
Все три команды устанавливают «восходящий поток» «ветви» как «источник / ветвь» (или они терпят неудачу).
Вверх по течению используется в качестве опорной точки аргумент менее git status, git push, git mergeи , таким образом , git pull(если он сконфигурирован таким образом (который по умолчанию или почти по умолчанию)).
Например git status, если вы настроены, вам сообщают , насколько далеко вы находитесь позади или впереди.
git pushпо умолчанию настроен на передачу текущей ветви вверх по потоку 2, начиная с git 2.0.
1 ... и если «origin» является единственным удаленным устройством, имеющим «ответвление»
2, то по умолчанию (называемое «simple») также обеспечивает одинаковое имя обеих ветвей
git pull, тогда как некоторые ветви попросили бы удалить удаленную ветку. Оказывается, если вы впервые проверяете удаленную ветку, которую создал ваш пир, gitbranch.<BNAME>.remote=originзапускается и добавляет локальный gitconfig. Который затем позволяет выпускатьgit pull. Однако, если вы тот, кто создает веткуgit checkout -b BNAME, то git, конечно, не знает. Поэтому вы должны указать его удаленный.