„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://[email protected]/repo.git
To https://[email protected]/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://[email protected]/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ć?

Rozsądne
źródło

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
bytedev
źródło
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).

Rozsądne
źródło
„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

JDev-Guns
źródło
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

Ogglas
źródło
14

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

wprowadź opis obrazu tutaj

Sudheer Kumar Palchuri
źródło
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.

YoungJeXu
źródło
-1

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

  1. Usuwanie tagu z zaznaczeniem „Usuń tag ze wszystkich pilotów”
  2. Odtworzenie tagu
Marco Barbero
źródło