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/mooGit нуждается в способе различать быстрые и не-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-configTL;DR версия:
git push origin +HEAD:refs/heads/ignore-netbeans-config