«Обновления были отклонены, поскольку тег уже существует» при попытке отправить в 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.