#git #branch #push #remote-branch
#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.
Могу ли я выполнить переход в новую ветку, не создавая локальную?
Комментарии:
1. Хороший вопрос! Конечно, если вы могли бы внести какие-либо дополнительные изменения здесь, вы бы хотели продолжить и создать ветку для обеспечения безопасности.
Ответ №1:
попробуйте
git push origin HEAD:refs/heads/ignore-netbeans-config
Комментарии:
1. Вы должны быть в состоянии опустить часть «ссылки / заголовки /».
2. Я думаю, если она еще не существует, вы должны быть явными.
Ответ №2:
Давайте сначала проясним несколько мелких деталей:
- Ветка — это «ссылка» в
refs/heads
пространстве имен. Простоls .git/refs/heads
иcat
файлы там, чтобы понять, что я имею в виду. - Тег «ref» находится в
refs/tags
пространстве имен. Просто используйте ls.git/refs/tags
, чтобы убедиться в этом сами. HEAD
просто еще одна «ссылка», но она особенная в том аспекте, что она может быть «символической». Простоcat .git/HEAD
и посмотрите, что там написано.
push
Операция выполняется с «ссылкой», и «сопоставление» по умолчанию сохраняет пространство имен. Это означает, что когда я нажимаю на ветку, она будет отображаться как ветка на удаленном компьютере; когда я нажимаю на тег, он будет отображаться как тег на удаленном компьютере. Рассмотрим следующие сценарии:
-
Я хочу переместить тег
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