Ich habe im Hauptzweig ein Tag mit folgendem Namen erstellt v0.1
:
git tag -a v0.1
Aber dann wurde mir klar, dass es noch einige Änderungen gab, die ich für Release 0.1 in Master einbinden musste, also habe ich das getan. Aber jetzt v0.1
bleibt mein Tag beim falschen Festschreiben hängen (um die Post-It-Note-Analogie aufzurufen). Ich möchte, dass es beim letzten Commit auf dem Master hängen bleibt, aber stattdessen beim zweitletzten Commit auf dem Master.
Wie kann ich es auf das letzte Commit für den Master verschieben?
git push origin :refs/tag/<tagname>
und dann tungit tag -fa <tagname>
und danngit push origin master --tags
. Andernfalls könnte es vorkommen, dass in der Refs-Liste auf der Fernbedienung seltsame Dinge mit angehängten Zeichen ^ und {} angezeigt werden. Vielen Dank an Dan von codebasehq.com für diesen Hinweis.:refs/tag/<tagname>
sollte es sein:refs/tags/<tagname>
.git push -f origin <tagname>
Genauer gesagt müssen Sie das Hinzufügen des Tags erzwingen und dann mit den Optionen --tags und -f drücken:
quelle
Um zusammenzufassen, ob Ihre Fernbedienung aufgerufen wird
origin
und Sie an einemmaster
Zweig arbeiten:Sie können auch Zeile 4 austauschen
git push origin --tags
, um alle Änderungen mit Tags aus Ihren lokalen Änderungen zu übertragen.Basierend auf @ stuart-golodetz, @ greg-hewgill, @eedeep, @ ben-hocking Antworten, Kommentaren unter ihren Antworten und NateS Kommentaren unter meiner Antwort.
quelle
Löschen Sie es mit
git tag -d <tagname>
und erstellen Sie es dann beim richtigen Commit neu.quelle
Ich versuche ein paar Dinge zu vermeiden, wenn ich Git benutze.
Verwendung von Kenntnissen der Interna, zB Refs / Tags. Ich versuche, nur 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.)
Die Anwendung von Gewalt, wenn nicht erforderlich.
Dinge übertreiben. (Drücken eines Zweigs und / oder vieler Tags, um ein Tag dort zu erhalten, wo ich es haben möchte.)
Hier ist meine gewaltfreie Lösung zum Ändern eines Tags, sowohl lokal als auch remote, ohne Kenntnis der Git-Interna.
Ich benutze es, wenn ein Software-Fix letztendlich ein Problem hat und aktualisiert / erneut veröffentlicht werden muss.
github
ist ein Beispiel-Remote-Name,fix123
ein Beispiel-Tag-Name und790a621265
ein Beispiel-Commit.quelle
Ich werde hier nur eine andere Form dieses Befehls belassen, die meinen Bedürfnissen entsprach.
Es gab ein Tag
v0.0.1.2
, das ich verschieben wollte.Und dann:
quelle
Ein anderer Weg:
Verschieben Sie das Tag im Remote-Repo. (Ersetzen Sie HEAD bei Bedarf durch ein anderes.)
Änderungen zurückholen.
quelle
Alias zum Verschieben eines Tags in ein anderes Commit.
Um in Ihrem Beispiel das Commit mit dem Hash e2ea1639 zu verschieben, gehen Sie wie folgt vor :
git tagm v0.1 e2ea1639
.Verwenden Sie für Push-Tags
git tagmp v0.1 e2ea1639
.Beide Alias behalten Ihr ursprüngliches Datum und Ihre ursprüngliche Nachricht. Wenn Sie verwenden, haben
git tag -d
Sie Ihre ursprüngliche Nachricht verloren.Speichern Sie sie in Ihrer
.gitconfig
Dateiquelle
Wenn Sie ein mit Anmerkungen versehenes Tag verschieben möchten, ändern Sie nur das Ziel-Commit, behalten jedoch die Verwendung der Anmerkungsnachricht und anderer Metadaten bei:
Verwendung: moveTag <tag-to-move> <Ziel>
Die obige Funktion wurde unter Bezugnahme auf teerapap / git-move-annotated-tag.sh entwickelt .
quelle
git tag -f -a my_tag
Die Nachricht einer vorherigen Nachricht (mit Git-Version 2.11.0) wird bereits beibehalten.