Как вы вставляете тег Git в ветку, используя refspec? - PullRequest
215 голосов
/ 31 октября 2010

Я хочу принудительно отправить, например, мой тег 1.0.0 в мою удаленную master ветвь.

Сейчас я делаю следующее:

git push production +1.0.0:master

Я хочу принудительно нажать , потому что все, что меня волнует, это то, что код внутри тега 1.0.0 помещается в ветку master в удаленном хранилище.

Что я делаю не так?

Обновление # 1

Когда я захожу по SSH на мой сервер, где находится мой Git репозиторий, и выполняю git branch -l, я не вижу в списке master ветви.

Обновление № 2

После запуска git tag -l из удаленного репозитория Git, я вижу, что в списке master, что означает, что когда я запустил следующее:

git push production 1.0.0:master

Он фактически выдвинул тег и создал тег с именем master вместо новой ветви .

Я хочу в основном поместить содержимое тега 1.0.0 в ветку master удаленного репозитория Git.

Ответы [ 4 ]

469 голосов
/ 31 октября 2010
git push --tags production
61 голосов
/ 09 ноября 2011

Я создаю тег, подобный этому, и затем помещаю его в GitHub:

git tag -a v1.1 -m "Version 1.1 is waiting for review"
git push --tags

Counting objects: 1, done.
Writing objects: 100% (1/1), 180 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:neoneye/triangle_draw.git
 * [new tag]         v1.1 -> v1.1
58 голосов
/ 31 октября 2010

Вероятно, сбой, потому что 1.0.0 является аннотированным тегом. Возможно, вы увидели следующее сообщение об ошибке:

ошибка: попытка записать объект без фиксации в ветку refs /heads / master

У аннотированных тегов есть свой собственный особый тип объекта, который указывает на отмеченный объект фиксации. Ветви не могут с пользой указывать на теги объектов, только коммитить объекты. Вам нужно «очистить» аннотированный тег, чтобы зафиксировать объект, и вместо этого нажать его.

git push production +1.0.0^{commit}:master
git push production +1.0.0~0:master          # shorthand

Существует другой синтаксис, который также будет работать в этом случае, но это означает что-то немного другое, если объект тега указывает на что-то другое, чем коммит (или объект тега, на который указывает (объект тега, который указывает на…) коммит).

git push production +1.0.0^{}:master

Эти синтаксисы очистки тегов описаны в git-rev-parse (1) в Указание редакций .

10 голосов
/ 03 июня 2013

Для нажатия одного тега: git push <reponame> <tagname>

Например, git push production 1.0.0. Теги не привязаны к веткам, они привязаны к коммитам.

Если вы хотите, чтобы содержимое тега находилось в основной ветви, делайте это локально на вашем компьютере. Я бы предположил, что вы продолжаете развиваться в своей локальной ветке master. Тогда достаточно git push origin master.

...