В чем разница между "git push remote branch" и "git push remote HEAD: branch"? - PullRequest
0 голосов
/ 25 февраля 2019

Попробовав первое, я получил error: src refspec branch does not match any., в то время как попытка последнего удалась.

В случае, если это примечательно, название ветви было 1.3.

В чем разница между этими двумяи почему первый потерпел неудачу, когда второй преуспел?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Судя по появившейся ошибке, в вашем локальном репозитории нет ветви с именем branch, но в удаленном репозитории она уже должна быть, например, если соавтор уже выдвинул branch.

Конкретный аргумент для git push, о котором идет речь, известен как refspec , и с помощью разделителя двоеточий вы можете фактически переименовывать ветви или объекты на удаленной стороне.Следовательно, refspec, равный HEAD:branch, означает толчок ветви, начиная с самого последнего коммита в текущей ветке, если символическая ссылка HEAD относится к ветке (или коммит, к которому относится HEAD, если отсоединено ), но с ref branch на удаленной стороне.

Для полноты, если branch еще не существует на пульте, вы должны вызвать

git push remote HEAD:refs/heads/branch

<refspec>

Укажите, какую ссылку назначения обновлять с какого исходного объекта.Формат параметра <refspec> является необязательным плюсом +, за которым следует исходный объект <src>, за которым следует двоеточие :, за которым следует пункт назначения <dst>.

.часто это название ветви, которую вы хотите нажать, но это может быть любое произвольное «выражение SHA-1», например master~4 или HEAD (см. gitrevisions ).

Указывает, какой ref на удаленной стороне обновляется этим нажатием.Произвольные выражения не могут быть использованы здесь, фактический ref должен быть назван.Если git push [<repository>] без какого-либо аргумента <refspec> настроен на обновление некоторого ref в пункте назначения с <src> с remote.<repository>.push переменной конфигурации, часть :<dst> может быть опущена - такой толчок обновит ref, что <src>обычно обновляется без <refspec> в командной строке.В противном случае отсутствие :<dst> означает обновление той же ссылки, что и <src>.

.
0 голосов
/ 25 февраля 2019

То, что когда вы говорите HEAD:branch, вам не нужно , вам нужно иметь локальную ветку с тем же именем удаленной ветви в вашей локальной сети ... когда вы набираете git push some-remote HEAD:some-branch, вы спрашиваете этопоместить все, что вы извлекли в данный момент, в качестве удаленной ветви, независимо от того, как она вызывается на вашем локальном компьютере (или работает на detached HEAD ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...