В этом случае, когда мне нужно передавать параметр -b?В чем разница между приведенными ниже, когда удаленный существует
Разница в том, что если вы передадите флаг -b
, git
создаст новую ветвь с именемвы даете и основываетесь на ветви, в которой вы были, когда создавали эту ветку.Без флага git
будет искать существующую ветку, включая ветку в любых отслеживаемых вами удаленных репозиториях, и переключаться на одну из них, если ее найдет.
Итак, скажем: 1)вы находитесь в своей собственной ветке с именем foo
;2) у вас есть пульт под названием upstream
;и 3) у этого пульта есть ветвь с именем bar
.Если вы скажете:
git checkout bar
, вы переключитесь на локальную копию foo
ветви на upstream
(при условии, что ваш репозиторий уже знает о foo
, потому что вы недавно сделали git fetch
).Другими словами, если вы сделаете:
git diff upstream/bar
, тогда git
не сообщит о каких-либо различиях.
Но, если вы установите флаг -b
:
git checkout -b bar
затем git
создаст новую ветку , которая также называется bar
, но будет иметь тот же контент, что и ветка foo
, в которой вы только что находились. Другими словами:
git diff upstream/bar
сообщит о различиях между upstream
'bar
филиалом и вашим локальным bar
филиалом (который, опять же, получил свое содержимое из вашей foo
ветви).
Попробуйте сами.Просто выберите две существующие удаленные ветви, которые не существуют локально, скажем, upstream/branch1
и upstream/branch2
на вашем пульте, которые, как вы знаете, имеют некоторые различия.Убедитесь, что есть различия с git diff upstream/branch1 upstream/branch2
.Теперь оформите первую ветку без флага -b
:
git checkout branch1
Теперь у вас должна быть локальная ветка с именем branch1
.Опять же, убедитесь, что это соответствует исходной версии: git diff upstream/branch1 branch1
.Там не должно быть никаких различий.Затем попробуйте создать branch2
, используя флаг -b
:
git checkout -b branch2
Теперь у вас должен быть локальный branch2
, но он должен совпадать с тем, что в branch1
, а также upstream/branch1
.Подтвердите:
git diff upstream/branch1 branch2 # should be no diffs
git diff upstream/branch2 branch2 # should be like diffing branch1 and upstream/branch2