Git: как перейти от "Нет ветки" к новой удаленной ветке?
Я сделал:
git co upstream/master # To no branch.
<then did a trivial edit on some file...>
git commit -a -m "Trivial edit"
git push origin NewBranch
Но получилось вот что:
$ git push origin ignore-netbeans-config
error: src refspec ignore-netbeans-config does not match any.
Можно ли перейти в новую ветвь, не создавая локальную?
2 ответа:
Давайте сначала проясним несколько мелких деталей:
- ветвь-это "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". Если бы эта ветвь не существовала раньше, или если вы перезаписываете некоторые коммиты в нем (т. е. non-ff push), используйте+
. В противном случае, нет. Конечный результат:
git push origin +HEAD:refs/heads/ignore-netbeans-config
TL;DR версия:
git push origin +HEAD:refs/heads/ignore-netbeans-config