Давайте сначала проясним несколько мелких деталей:
- Ветвь является "ref" в пространстве имен
refs/heads
. Просто ls .git/refs/heads
и cat
файлы там, чтобы понять, что я имею в виду.
- Тег является "ref" в пространстве имен
refs/tags
. Просто ls .git/refs/tags
, чтобы убедиться в этом.
HEAD
просто еще один «ref», но он особенный в том смысле, что он может быть «символическим». Просто cat .git/HEAD
и посмотрите, что там написано.
Операция push
работает с «ref», а «отображение» по умолчанию сохраняет пространство имен. Это означает, что когда я нажимаю ветку, она будет отображаться как ветка на пульте; когда я нажимаю метку, она появляется как метка на пульте. Рассмотрим следующие сценарии:
Я хочу нажать на тег moo
и сделать так, чтобы он отображался как ветвь на удаленном сервере (да, я по сути "преобразовываю" тег в ветвь). Вот как я это сделаю:
git push origin moo:refs/heads/moo
Git нужен способ различать ускоренную перемотку вперед и не-ff толчки, чтобы люди не заканчивали переписывать чужую работу по ошибке. Допустим, я хочу нажать на ветви master
, next
и pu
, из которых только pu
не является ff. Вот как я это сделаю (обратите внимание, что вы должны указать явное сопоставление при использовании +
):
git push origin master next +pu:pu
Теперь перейдем к вашему вопросу. Вы хотите отправить ваш HEAD
так, чтобы он появился в пространстве имен refs/heads
на удаленном компьютере как ветка с именем ignore-netbeans-config. Если эта ветвь ранее не существовала или вы перезаписываете в ней некоторые коммиты (т. Е. Не-ff push), используйте +
. В противном случае нет. Конечный результат:
git push origin +HEAD:refs/heads/ignore-netbeans-config
TL; версия DR: git push origin +HEAD:refs/heads/ignore-netbeans-config