Wie kann ich ein Tag auf einem Git-Branch zu einem anderen Commit verschieben?

Lesezeit: 6 Minuten

Wie kann ich ein Tag auf einem Git Branch zu einem
seeeehr

Ich habe ein Tag auf dem Master-Zweig mit dem Namen erstellt v0.1 so was:

git tag -a v0.1

Aber dann wurde mir klar, dass es noch einige Änderungen gab, die ich in Master für Release 0.1 zusammenführen musste, also tat ich das. Aber jetzt meine v0.1 tag hängt (um die Post-it-Note-Analogie aufzurufen) am falschen Commit. Ich möchte, dass es beim letzten Commit auf Master hängen bleibt, aber stattdessen bleibt es beim zweitletzten Commit auf Master hängen.

Wie kann ich es auf den neuesten Commit auf dem Master verschieben?

1646633295 542 Wie kann ich ein Tag auf einem Git Branch zu einem
Greg Hewgill

Verwenden Sie die -f Option zu git tag:

-f
--force

    Replace an existing tag with the given name (instead of failing)

Sie möchten wahrscheinlich verwenden -f in Verbindung mit -a um ein annotiertes Tag anstelle eines nicht annotierten Tags zu erzwingen.

Beispiel

  1. Löschen Sie das Tag auf einer beliebigen Fernbedienung, bevor Sie drücken

    git push origin :refs/tags/<tagname>
    
  2. Ersetzen Sie das Tag, um auf den neuesten Commit zu verweisen

    git tag -fa <tagname>
    
  3. Pushen Sie das Tag an den Remote-Ursprung

    git push origin master --tags
    

  • Dies funktioniert nur, wenn Sie den Code nicht von Ihrem Computer verschoben haben. Wenn ja, lautet die beste Antwort „Es gibt viele Zahlen auf der Welt“, da sich der Aufwand wahrscheinlich nicht lohnt.

    – Chris Huang-Leaver

    25. Februar 2013 um 13:27 Uhr

  • Wenn Sie Ihr Tag bereits gepusht haben, können Sie das Remote-Tag immer noch mit einem erzwungenen Push aktualisieren git push -f origin <tagname>

    – rc_luke

    16. Oktober 2013 um 21:33 Uhr

  • Sie müssen kein erzwungenes Pushen verwenden, wenn die Tag-Referenz schnell an die neue Stelle weitergeleitet werden kann.

    – GergelyPolonkai

    25. November 2014 um 11:12 Uhr

  • Was hier und in den Dokumenten nicht erwähnt wird, ist, dass dies die Tag-Nachricht tatsächlich verschiebt, wenn keine neue Nachricht angegeben wird.

    – Twonki

    13. Januar 2015 um 16:06 Uhr

  • Beachten Sie das in #3 git push origin master --tags wird Tags pushen, und das master Branch, wenn Sie lokal Änderungen daran festgeschrieben haben. Benutz einfach git push origin --tags wenn Sie nur Tags pushen möchten.

    – c32hedge

    7. Dezember 2016 um 20:26 Uhr

Genauer gesagt müssen Sie das Hinzufügen des Tags erzwingen und dann mit der Option –tags und -f pushen:

git tag -f -a <tagname>
git push -f --tags

1646633296 740 Wie kann ich ein Tag auf einem Git Branch zu einem
Nat

Zusammenfassend, wenn Ihre Fernbedienung angerufen wird origin und du arbeitest daran master sich verzeigen:

git tag -d <tagname>                  # delete the old tag locally
git push origin :refs/tags/<tagname>  # delete the old tag remotely
git tag <tagname> <commitId>          # make a new tag locally
git push origin <tagname>             # push the new local tag to the remote 

Beschreibung:

  • Zeile 1 entfernt das Tag in der lokalen Umgebung.
  • Zeile 2 entfernt das Tag in remote env.
  • Zeile 3 fügt das Tag einem anderen Commit hinzu
  • Zeile 4 überträgt die Änderung auf die Fernbedienung

Sie können auch Zeile 4 zu ändern git push origin --tags um alle Ihre lokalen Tag-Änderungen/Aktualisierungen an das Remote-Repo zu übertragen.

Die obige Antwort basiert auf dem Inhalt der Frage von @eedeep sowie Antworten von Stuart Golodetz, Greg Hewgill und @ben-hocking und Kommentaren unter ihren Antworten sowie den ursprünglichen Kommentaren von @NateS unter meiner Antwort.

  • Zeile 4 funktioniert zum Pushen eines Explicit Einzel aktualisiertes Tag in das Remote-Repository, falls Sie nicht alle Tags aktualisieren möchten, wie ich es nicht getan habe.

    – davenpcj

    8. November 2021 um 16:00 Uhr

Löschen Sie es mit git tag -d <tagname> und erstellen Sie es dann auf dem richtigen Commit neu.

Wie kann ich ein Tag auf einem Git Branch zu einem
Iwan

Ich versuche, ein paar Dinge zu vermeiden, wenn ich Git verwende.

  1. Verwendung von Kenntnissen der Interna, zB Refs/Tags. Ich versuche, ausschließlich die dokumentierten Git-Befehle zu verwenden und Dinge zu vermeiden, die Kenntnisse über den internen Inhalt des .git-Verzeichnisses erfordern. (Das heißt, ich behandle Git als Git-Benutzer und nicht als Git-Entwickler.)

  2. Die Anwendung von Gewalt, wenn nicht erforderlich.

  3. Dinge übertreiben. (Einen Ast und/oder viele Tags verschieben, um ein Tag dort hinzubekommen, wo ich es haben möchte.)

Hier ist also meine gewaltfreie Lösung zum Ändern eines Tags, sowohl lokal als auch remote, ohne Kenntnis der Git-Interna.

Ich verwende es, wenn ein Software-Fix letztendlich ein Problem hat und aktualisiert/neu veröffentlicht werden muss.

git tag -d fix123                # delete the old local tag
git push github :fix123          # delete the old remote tag (use for each affected remote)
git tag fix123 790a621265        # create a new local tag
git push github fix123           # push new tag to remote    (use for each affected remote)

github ist ein Beispiel für einen entfernten Namen, fix123 ein Beispiel-Tag-Name ist und 790a621265 ein Beispiel-Commit.

  • Ich denke, OPs-Tag wurde kommentiert. Die dritte Zeile könnte stattdessen so aussehen git tag -a fix123 790a621265 # create a new local, annotaged tag

    – Johan Bergens

    23. Februar 2021 um 13:48 Uhr


  • Ich hasse es, dass dies die beste Antwort ist. Ich frage mich, warum das so kompliziert sein muss? Tags eignen sich gut zum Markieren, welcher Commit für die Produktion bestimmt ist, daher muss ich ziemlich oft ändern, an welchen Commit er angeheftet ist. Die Verwendung eines Zweigs, den Sie ständig rebasen, ist derzeit einfacher, aber überflüssig, wenn die Umgebung für Ihre Repository-Inhalte keine Rolle spielt (etwas, das es wert ist, angestrebt zu werden).

    – Zyl

    9. Juni 2021 um 12:18 Uhr


1646633297 496 Wie kann ich ein Tag auf einem Git Branch zu einem
Nakilon

Ich lasse hier nur eine andere Form dieses Befehls, die meinen Bedürfnissen entsprach.
Es gab ein Etikett v0.0.1.2 dass ich umziehen wollte.

$ git tag -f v0.0.1.2 63eff6a

Updated tag 'v0.0.1.2' (was 8078562)

Und dann:

$ git push --tags --force

  • Ich denke, OPs-Tag wurde kommentiert. Die dritte Zeile könnte stattdessen so aussehen git tag -a fix123 790a621265 # create a new local, annotaged tag

    – Johan Bergens

    23. Februar 2021 um 13:48 Uhr


  • Ich hasse es, dass dies die beste Antwort ist. Ich frage mich, warum das so kompliziert sein muss? Tags eignen sich gut zum Markieren, welcher Commit für die Produktion bestimmt ist, daher muss ich ziemlich oft ändern, an welchen Commit er angeheftet ist. Die Verwendung eines Zweigs, den Sie ständig rebasen, ist derzeit einfacher, aber überflüssig, wenn die Umgebung für Ihre Repository-Inhalte keine Rolle spielt (etwas, das es wert ist, angestrebt zu werden).

    – Zyl

    9. Juni 2021 um 12:18 Uhr


Wie kann ich ein Tag auf einem Git Branch zu einem
Juan Antonio Tubío

Alias, um ein Tag zu einem anderen Commit zu verschieben.

Um in Ihrem Beispiel den Commit mit dem Hash e2ea1639 zu verschieben, tun Sie Folgendes: git tagm v0.1 e2ea1639.

Verwenden Sie für gepushte Tags git tagmp v0.1 e2ea1639.

Beide Aliasnamen behalten das ursprüngliche Datum und die ursprüngliche Nachricht bei. Wenn du benutzt git tag -d Sie haben Ihre ursprüngliche Nachricht verloren.

Speichern Sie sie auf Ihrem .gitconfig Datei

# Return date of tag. (To use in another alias)
tag-date = "!git show $1 | awk '{ if ($1 == \"Date:\") { print substr($0, index($0,$3)) }}' | tail -2 | head -1 #"

# Show tag message
tag-message = "!git show $1 | awk -v capture=0 '{ if(capture) message=message\"\\n\"$0}; BEGIN {message=\"\"}; { if ($1 == \"Date:\" && length(message)==0 ) {capture=1}; if ($1 == \"commit\" ) {capture=0}  }; END { print message }' | sed '$ d' | cat -s #"

### Move tag. Use: git tagm <tagname> <newcommit> 
tagm = "!GIT_TAG_MESSAGE=$(git tag-message $1) && GIT_COMMITTER_DATE=$(git tag-date $1) && git tag-message $1 && git tag -d $1 && git tag -a $1 $2 -m \"$GIT_TAG_MESSAGE\" #"

### Move pushed tag. Use: git tagmp <tagname> <newcommit> 
tagmp = "!git tagm $1 $2 && git push --delete origin $1 && git push origin $1 #"

963440cookie-checkWie kann ich ein Tag auf einem Git-Branch zu einem anderen Commit verschieben?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy