Недавно у меня был сценарий, в котором я находился в отдельном состоянии HEAD. Я хотел подтолкнуть это к вилке на github, чтобы поделиться некоторым кодом работы с партнером по команде. Я не нуждался в имени локальной ветки для этого конкретного коммита.
Ясно, что это не сработало бы:
git push sandy-github HEAD
Это имеет смысл, поскольку я не указывал имя для удаленной ветки.
Но я не понимаю, почему это не сработало:
git push sandy-github HEAD:mynewbranch
Это привело к следующей ошибке:
ошибка: невозможно нажать на неквалифицированный адрес: mynewbranch Пункт назначения refspec не совпадает с существующим ссылкой на удаленный начинается с refs/, и мы не можем угадать префикс на основе исходного кода ref. error: не удалось нажать некоторые ссылки на git @github.com: sandyarmstrong/myreponame.git '
Мне пришлось делать:
git push sandy-github HEAD:refs/heads/mynewbranch
Это сработало. Из документов:
git push origin master: refs/heads/experimental
Создайте экспериментальную ветвь в исходном репозитории, скопировав текущую главную ветвь. Эта форма нужна только для создания нового ветки или тега в удаленном репозитории, когда локальное имя и удаленное имя отличается; в противном случае имя ссылки само по себе будет работа.
Я просто не понимаю, почему это было необходимо. Я предполагаю, что там что-то важное о git Я не понимаю здесь. Почему этот сложный синтаксис необходим только потому, что имена не совпадают? Почему синтаксис HEAD:mynewbranch
не достаточен, чтобы позволить git знать, что он должен сгенерировать новую ветку на удаленном носителе с именем "mynewbranch"?