«Обновления были отклонены, поскольку тег уже существует» при попытке отправить в SourceTree


119

При попытке отправить через исходное дерево появляется следующая ошибка:

git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags origin refs/heads/master:refs/heads/master 
Pushing to https://user@github.com/repo.git
To https://user@github.com/repo.git
 = [up to date]      master -> master
...
 ! [rejected]        example_tag -> example_tag (already exists)
updating local tracking ref 'refs/remotes/origin/master'
error: failed to push some refs to 'https://user@github.com/repo.git'
hint: Updates were rejected because the tag already exists in the remote.
Completed with errors, see above

Насколько мне известно, я не вносил никаких изменений в этот тег. Как я могу это исправить?

Ответы:


231

Вы также можете решить эту проблему в git bash (нажмите кнопку «Терминал» в пользовательском интерфейсе дерева исходного кода). Тип:

git pull --tags

3
Я считаю, что это лучший ответ, потому что это путь наименьшего сопротивления.
Чад

41
В случае конфликта вы можете git pull --tags -fперезаписать тот, который у вас есть локально, если вы этого хотите
DenLilleMand

2
В SourceTree нажмите «Получить все» и включите «выборку всех тегов». Это сделало бы это.
darkgaze 02

118

Если вы не вносили никаких локальных изменений в тег, который хотите сохранить, вы можете удалить тег, который был отклонен, поскольку он уже существует ( example_tagв данном случае):

  1. Щелкните правой кнопкой мыши и выберите тег , чтобы удалить его (обязательно снимите с Удалить тег из всех пультов флажком).
  2. Выберите Fetch вариант (Fetch и хранить все теги локально вовсе не должен быть включен).
  3. Теперь у вас должен быть этот тег, который был только что удален, и при попытке Push больше не будет отображаться это сообщение об ошибке.

Причиной этого является общим в SourceTree происходит потому , Нажмите все теги параметр установлен на по умолчанию. (Другой способ скрыть эту ошибку - снять этот флажок.)


«Извлечь и сохранить все теги локально не обязательно» - вот что помогло мне, проверив, что проблема только что повторилась.
Том

Если предположить, что исходный репо является источником истины, это решение является наименее разрушительным и мгновенно устраняет проблему.
Стив Хенти

К сожалению, когда у вас есть 15 отклоненных тегов, шаги 1,2 и 3 могут быть очень утомительными. Да, отключение параметра «Нажать все теги» - это, вероятно, правильный путь.
SagiSergeNadir

27

Снимите флажок push all tagsв нижней части пользовательского интерфейса, когда подтвердите свой git push


Вы имели в виду push all tags?
Wodin

Большой! Не наблюдал этого. Спасибо
Meg-90

@Wodin, поэтому, если вы ПРОВЕРИТЕ push all tagsв пользовательском интерфейсе, он попытается перезаписать предыдущие теги. но вы должны ПРОВЕРИТЬ его, чтобы предотвратить перезапись
JDev-Guns

@ JDev-Guns Я просто спрашивал формулировку. Вы изначально сказали push all TABs. Я не знаком с SourceTree, но подозревал, что вы имели в виду TAGsвместо TABs.
Wodin

@Wodin oh gotcha! Я думаю, что сказал, TAGsно если я не сказал , я хотел сказатьTABs
JDev-Guns

15

git pull --tagsработает очень хорошо, но иногда вы можете получить ошибку даже с этой командой. Пример сообщения об ошибке:

 ! [rejected]        example_tag      -> example_tag  (would clobber existing tag)

Это можно решить с помощью команды: git pull --tags -f

Источник:

https://github.com/concourse/git-resource/issues/233


14

Убедитесь, что вы сняли флажок с кнопки «Нажать все теги» при нажатии.

введите описание изображения здесь


Как упоминалось выше, если вы добавили новый тег локально, не означает ли это, что он не передается на удаленный компьютер?
bytedev

0

Да, действительно, сначала потяните за метки перед собой push --tags. Решил мою проблему.


-1

Решаю проблему на SourceTree следующим образом:

  1. Удаление тега с выбором «Удалить тег со всех пультов»
  2. Воссоздание тега
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.