"Оновлення було відхилено, оскільки тег уже існує" при спробі натиснути на SourceTree


118

При спробі натиснути через Дерево-джерело я отримую таку помилку:

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

Я не вносив жодних змін до цього тегу, наскільки мені відомо. Як я можу це виправити?

Відповіді:


230

Ви також повинні мати можливість вирішити це в git bash (натисніть на кнопку "Terminal" у користувальницькому інтерфейсі Source Tree). Тип:

git pull --tags

3
Я вважаю, що це найкраща відповідь, оскільки це шлях найменшого опору.
Чад

40
У конфлікті ви можете git pull --tags -fперезаписати локальну, якщо це те, що ви хочете
DenLilleMand

2
У SourceTree натисніть "Вибрати" та увімкніть "отримати всі теги". Це зробило б це.
darkgaze

117

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

  1. Клацніть правою кнопкою миші і виберіть тег , щоб видалити його (обов'язково зніміть з Видалити тег з усіх пультів прапорцем).
  2. Оберіть опцію " Витягнути " ( Вибрати та зберігати всі локальні теги не потрібно вмикати)
  3. Тепер у вас повинен бути тег, який щойно видалили назад, і спроба Push більше не показуватиме повідомлення про помилку.

Причиною цього є загальним в SourceTree відбувається тому , Натисніть все теги параметр встановлений на за замовчуванням. (Ще один спосіб приховати цю помилку - зняти цю опцію.)


"Отримати та зберігати всі теги на локальному рівні не потрібно вмикати", - це те, що було зроблено для мене, перевіривши, що щойно спричинило проблему повторитись.
Том

Якщо припустити, що РЕПО є джерелом істини, це рішення є найменш руйнівним та усуває проблему миттєво.
Стів Генті

На жаль, коли у вас є 15 відхилених тегів, 1,2 і 3 кроки можуть бути дуже стомлюючими. Так, вимкнення параметра "Натиснути всі теги" - це, мабуть, правильний шлях.
SagiSergeNadir

27

Зніміть прапорець push all tagsу нижній частині інтерфейсу користувача, коли ви підтвердите свій git push


Ви мали на увазі push all tags?
Водін

Чудово! Не спостерігав за цим. Спасибі
Мег-90,

@Wodin, якщо ви перевіряєте push all tagsінтерфейс, він спробує замінити попередні теги. але вам доведеться НЕВЕРЕБИТИ це, щоб запобігти перезапису
JDev-Guns

@ JDev-Guns Я просто запитував формулювання. Ви спочатку сказали push all TABs. Я не знайомий з SourceTree, але я підозрював, що ти маєш намір TAGsзамість цього TABs.
Водін

@Wodin oh gotcha! Я думаю, що я сказав, TAGsале якщо я цього не TABs
зробив

15

git pull --tagsпрацює дуже добре, але іноді ви можете отримати помилку навіть за допомогою цієї команди. Приклад повідомлення про помилку:

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

Це можна вирішити за допомогою команди: git pull --tags -f

Джерело:

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


14

Переконайтесь, що ви знімаєте прапорець під натисканням кнопки "Натиснути всі теги".

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


Як було сказано вище, якщо ви додали новий тег локально, це не означає, що він не натискається на пульт?
bytedev

0

Так, дійсно, потягніть теги спочатку перед собою push --tags. Вирішив мою проблему.


-1

Я вирішую проблему в SourceTree таким чином:

  1. Видалення тегу вибором "Видалити тег із усіх віддалених"
  2. Відтворення тегу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.