Ветки Git НЕ отображаются в ветке git после Pull или Fetch, но git checkout работает?

После фиксации моей последней работы над новой веткой branchname в моем локальном репозитории git на машине A я переместил эту работу в свое удаленное репозиторий gitlab с помощью

$ git push origin branchname 

Ветка master уже была синхронизирована с удаленным репо. Все ветки появились в удаленном репо в моем списке gitlab.

Позже я перешел к машине B. Сначала я сделал

$ git pull origin master 

и мастер был обновлен, но моя новая branchname не появлялась, когда я набирал git branch, и не существовало другой ветки, которую я создал, в дереве истории. Я перешел к этому post и следовал указаниям из первого ответа. Другая «ветка git» по-прежнему не показывала другие мои ветки. По прихоти я просто попытался сделать

$ git checkout branchname 

и это было там и проверено нормально. Затем команда git branch показала мастер и имя ветки в моем списке веток. Я сделал то же самое с другой веткой, и она тоже появилась в списке веток после команды git branch.

Это нормальное поведение git для таких операций? Главное, что мне интересно, это то, что если вы извлекаете или извлекаете из удаленного репо, чтобы обновить локальное репо, которое должно было знать предыдущие знания о ветках на удаленном компьютере, почему они не отображаются во время команды git branch? И почему я могу их проверить, если я не мог их увидеть после git branch?

Эта сага похожа на THIS, но моя ветки на самом деле были там и просто НЕ отображали следующие команды ветки git, пока я их не проверил.


person Thom Ives    schedule 06.10.2017    source источник
comment
git branch -a показывает как удаленные, так и локальные ветки, а git branch показывает только локальную ветку. На машине B branchname не существует как локальная ветвь перед командой git checkout branchname.   -  person Sajib Khan    schedule 06.10.2017


Ответы (2)


$ git branch     # only local branches
* master

На машине B branchname не существует как локальная ветвь перед командой git checkout branchname, поэтому в списке отображается только master.

$ git fetch
$ git checkout branchname
$ git branch
  master
* branchname

Просмотреть все удаленные и локальные филиалы.

$ git branch -a   # remote and local branches
$ git branch -r   # remote branches only

Примечание. здесь git checkout branchname на самом деле находит локальную ветвь с именем branchname. Если он найден, просто перейдите в эту ветку, но если он не найден, он ищет в списках удаленных веток (например, origin/branchname ). Если найдено, то создайте локальную ветку branchname с той же историей, что и origin/branchname.

person Sajib Khan    schedule 06.10.2017
comment
Спасибо Саджиб. Я провел эти эксперименты, но ваш ответ и объяснения Ковски помогли мне лучше понять философию git в этом конкретном сценарии. - person Thom Ives; 06.10.2017
comment
Я использую ветку git, и она показывает все имена веток, кроме имени активной ветки (с символом *). Почему? - person dev-x; 05.07.2018
comment
Спасибо Саджиб. Это облегчило мне задачу. - person Bimal; 05.12.2019

git branch без каких-либо параметров показывает только ваши локальные ветки. Когда вы fetch, информация о ваших удаленных ветках обновляется, но она будет отображаться только тогда, когда вы используете git branch -r (только удаленные ветки) или, как предложил @SajibKhan, git branch -a (все удаленные и локальные ветки).

Так что да, это предполагаемое поведение. Вы можете проверить их, так как git распознает удаленную ветку и устанавливает новую локальную ветку, которая автоматически настраивается для отслеживания удаленной ветки.

person kowsky    schedule 06.10.2017
comment
Спасибо ковский. Мои дальнейшие эксперименты подтвердили ваши объяснения. Я просто не понял философии git в этом конкретном сценарии. Теперь это имеет смысл. - person Thom Ives; 06.10.2017