Подтвердить что ты не робот

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.
4b9b3361

Ответ 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