Разница между указанием refspec с помощью git push --tags или нет - PullRequest
0 голосов
/ 21 ноября 2018

Я наткнулся на эту довольно непонятную проблему при отправке тегов на пульт, используя две команды git push --tags и git push --tags origin master.Они не ведут себя одинаково в следующей ситуации:

Исходная ситуация

Я пытаюсь отправить недавно созданный тег (git tag test) в удаленное репо, которое на один коммит вперед, потому что кто-тоостальное подтолкнуло к нему коммит и я не потянул последние изменения.В виде рисунка:

Remote [master] (one commit ahead):
A ----- B ----- C ---- D
Local  [master] (one commit behind):
A ----- B ----- C 
            (tag:test)

Проблема

git push --tags работает, как и ожидалось:

Total 0 (delta 0), reused 0 (delta 0)
To https://remote.gitrepo.com/path/to/project
 * [new tag]         test14 -> test14

git push --tags origin master получает отклонение и ошибки:

Total 0 (delta 0), reused 0 (delta 0)
To https://remote.gitrepo.com/path/to/project
  * [new tag]         test15 -> test15
  ! [rejected]        master -> master (non-fast-forward)
error: failed to push some refs to 'https://remote.gitrepo.com/path/to/project'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Вопрос

Почему git push --tags origin master пытается что-то отделить от тега?Я спрашиваю, почему команда пытается передать ветку на удаленный, а не почему она отклоняется

1 Ответ

0 голосов
/ 21 ноября 2018

Я спрашиваю, почему команда пытается передать ветку на удаленный, а не почему она отклоняется,

Поскольку git push будет выдвигать новые коммиты и (с -теги) новые теги.

  • C уже выдвинут, поэтому ничего не нужно нажимать
  • новый тег выдвинут.

Во втором случае выпытаемся сбросить удаленную главную ветвь (которая находится в D) на C (в дополнение к меткам нажатия).

...