Git ветвь с именем origin/HEAD → origin/master
Я новичок в Git и все еще получаю от этого зависание. Я только недавно начал работать с веткими и задаюсь некоторыми вопросами.
У меня две системы разработки, рабочий стол Ubuntu и MacBookPro. Я сделал кучу работы в новой ветке organizations
в системе Ubuntu и выполнил коммиты и нажал на мое удаленное репо. В этот момент у меня были следующие ветки:
[email protected]:/projects$ git branch
accounting
master
* organizations
[email protected]:/projects$ git branch -r
origin/accounting
origin/master
origin/organizations
origin/superstar
Затем я переключился на MBP, чтобы вытащить новую ветку:
[email protected]:/projects$ git branch
accounting
* master
[email protected]:/projects$ git branch -r
origin/HEAD -> origin/master
origin/accounting
origin/master
origin/superstar
[email protected]:/projects$ git pull
2e20a14..ef35730 accounting -> origin/accounting
271a1a5..7e947ab master -> origin/master
* [new branch] organizations -> origin/organizations
[email protected]:/projects$ git branch
* accounting
master
[email protected]:/projects$ git branch -r
origin/HEAD -> origin/master
origin/accounting
origin/master
origin/organizations
origin/superstar
Итак, мои вопросы таковы:
- Почему MBP имеет ветвь
origin/HEAD -> origin/master
, но система Ubuntu не работает? Что это за ветка?
- Удаляет ли
git pull
все новые удаленные ветки? Я думал, что должен сказать, что это имя новых ветвей. Как вы можете видеть, он вытащил удаленную ветвь organizations
в commmand git pull
.
Ответы
Ответ 1
HEAD
обычно указывает на текущую отмеченную ветку. В размещенных (голых) репозиториях он обозначает ветвь по умолчанию, то есть ветку, которая проверяется при клонировании репозитория. Итак, origin/HEAD сообщает вам ветку происхождения по умолчанию.
Я не знаю, почему он не присутствует в вашем репозитории в системе Ubuntu. Возможно, вы изначально вытолкнули свой код из этого репозитория (когда происхождение было пустым и, тем самым, еще не было HEAD) и никогда не обновляло его.
Вроде бы что-то вроде происхождения /HEAD на практике не очень важно.
Чтобы ответить на другой вопрос: если вы запускаете git pull
без аргументов, он фактически извлекает все из удаленного (git fetch
запускается без аргументов тоже, поэтому он просто получает все). Однако все не сливается. Обновляются только ветки удаленного отслеживания (материал в git branch -r
).
Ответ 2
Насколько я знаю, HEAD
не является ветвью, а скорее указателем на node дерева истории (т.е. фиксация). Файлы, которые находятся в вашей конкретной рабочей копии, имеют состояние, описанное HEAD
.
Обычно HEAD
указывает на самую последнюю фиксацию в ветке, поэтому у вас есть самые последние файлы в рабочей копии. Используя git reset HEAD^
, вы можете перенести указатель на предыдущий фиксатор (т.е. Отменить последнее коммит в локальной копии).
Теперь у каждого репо git есть HEAD
, проверьте это с помощью git show HEAD
. Соответственно, origin/HEAD
является HEAD
вашего пульта origin
.
Теперь я нашел хороший вопрос, описывающий HEAD
: Что такое HEAD в Git?
Ответ 3
Это просто указатель на мастеринг, символическую ссылку, если хотите. Вы можете безопасно удалить его, выполнив следующее в терминале (или git bash/cygwin для пользователей Windows):
- перейти к вашему репозиторию
- выполнить:
git remote set-head origin -d
теперь его не должно быть:
$ git branch -r
origin/master