„Aktualizacje zostały odrzucone, ponieważ tag już istnieje” podczas próby wypchnięcia w SourceTree


119

Podczas próby wypychania za pośrednictwem drzewa źródłowego pojawia się następujący błąd:

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

O ile wiem, nie wprowadziłem żadnych zmian w tym tagu. Jak mogę to naprawić?

Odpowiedzi:


230

Powinieneś także być w stanie rozwiązać ten problem w git bash (kliknij przycisk „Terminal” w interfejsie drzewa źródłowego). Rodzaj:

git pull --tags

3
Czuję, że to najlepsza odpowiedź, ponieważ jest to ścieżka najmniejszego oporu.
Czad

40
Z konfliktem, który możesz zrobić, git pull --tags -faby nadpisać ten, który masz lokalnie, jeśli tego chcesz
DenLilleMand

2
W SourceTree kliknij Pobierz i włącz „Pobierz wszystkie tagi”. To wystarczy.
darkgaze

118

Jeśli nie wprowadziłeś żadnych lokalnych zmian w tagu, który chcesz zachować, możesz usunąć tag, który został odrzucony, ponieważ już istnieje ( example_tagw tym przypadku):

  1. Kliknij prawym przyciskiem myszy i wybierz tag, aby go usunąć (należy odznaczyć ten tag Usuń ze wszystkich pilotów wyboru).
  2. Wybierz opcję Pobierz ( nie trzeba włączać funkcji pobierania i przechowywania wszystkich tagów lokalnie ).
  3. Powinieneś teraz mieć ten tag, który właśnie został usunięty z powrotem, a próba wysłania nie będzie już wyświetlać tego komunikatu o błędzie.

Powodem jest to powszechne w SourceTree dlatego, że push wszystkie tagi opcja jest ustawiona na domyślne. (Innym sposobem na ukrycie tego błędu jest odznaczenie tej opcji).


„Pobieraj i przechowuj wszystkie tagi lokalnie nie muszą być włączone”, co zrobiło dla mnie, sprawdzając, czy problem się powtórzył.
Tom

Zakładając, że repozytorium typu upstream (origin) jest źródłem prawdy, to rozwiązanie jest najmniej destrukcyjne i natychmiast rozwiązuje problem.
Steve Henty

Niestety, gdy masz 15 odrzuconych tagów, kroki 1, 2 i 3 mogą być bardzo uciążliwe. Tak, wyłączenie opcji „Wypchnij wszystkie tagi” jest prawdopodobnie właściwą drogą.
SagiSergeNadir

27

Odznacz push all tagsu dołu interfejsu użytkownika, gdy potwierdzasz git push


Czy miałeś na myśli push all tags?
Wodin,

Wspaniały! Nie zauważyłem tego. Dzięki
Meg-90

@Wodin, więc jeśli zaznaczysz push all tagsw interfejsie użytkownika, spróbuje nadpisać poprzednie tagi. ale musisz to ODKRYĆ, aby zapobiec nadpisaniu
JDev-Guns

@ JDev-Guns Właśnie sprawdzałem sformułowanie. Pierwotnie powiedziałeś push all TABs. Nie jestem zaznajomiony z SourceTree, ale podejrzewałem chodziło TAGszamiast TABs.
Wodin,

@Wodin oh gotcha! Myślę, że powiedziałem, TAGsale jeśli nie, TABs
chciałem

15

git pull --tagsdziała naprawdę dobrze, ale czasami nawet przy użyciu tego polecenia może pojawić się błąd. Przykładowy komunikat o błędzie:

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

Można to rozwiązać za pomocą polecenia: git pull --tags -f

Źródło:

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


14

Upewnij się, że odznaczyłeś przycisk „Wciśnij wszystkie tagi”.

wprowadź opis obrazu tutaj


Jak wspomniano powyżej, jeśli dodałeś nowy tag lokalnie, czy nie oznacza to, że nie jest on przesłany do pilota?
bytedev

0

Tak, rzeczywiście, najpierw wyciągnij tagi przed sobą push --tags. Rozwiązał mój problem.


-1

Rozwiązuję problem na SourceTree w ten sposób:

  1. Usuwanie tagu z zaznaczeniem „Usuń tag ze wszystkich pilotów”
  2. Odtworzenie tagu
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.