Heute habe ich in den Protokollen nach einem Projekt gesucht und festgestellt, dass ich vor einiger Zeit einen Tag-Namen fett gefingert habe. Gibt es eine Möglichkeit, das Tag umzubenennen? Google hat nichts Nützliches gefunden.
Mir ist klar, dass ich die getaggte Version auschecken und ein neues Tag erstellen kann, das habe ich sogar versucht. Aber das scheint ein Tag-Objekt zu erzeugen, das nicht ganz richtig ist. Für einen,
git tag -l
listet es in Bezug auf alle anderen Tags in der falschen Reihenfolge auf. Ich habe keine Ahnung, ob das von Bedeutung ist, aber es lässt mich glauben, dass das neue Tag-Objekt nicht ganz das ist, was ich will. Ich kann damit leben, weil es mir wirklich nur wichtig ist, dass der Tag-Name mit der Dokumentation übereinstimmt, aber ich würde es lieber "richtig" machen, vorausgesetzt, es gibt einen richtigen Weg, dies zu tun.
git log --oneline --decorate --graph
ist hilfreich beim Bereinigen von Tags.Antworten:
So benenne ich ein Tag um
old
innew
:Der Doppelpunkt im Push-Befehl entfernt das Tag aus dem Remote-Repository. Wenn Sie dies nicht tun, erstellt Git beim Ziehen das alte Tag auf Ihrem Computer.
Stellen Sie schließlich sicher, dass die anderen Benutzer das gelöschte Tag entfernen. Bitte fordern Sie sie (Mitarbeiter) auf, den folgenden Befehl auszuführen:
Beachten Sie, dass Sie beim Ändern eines mit Anmerkungen versehenen Tags sicherstellen müssen, dass der neue Tag-Name auf das zugrunde liegende Commit verweist und nicht auf das alte mit Anmerkungen versehene Tag-Objekt, das Sie löschen möchten. Verwenden Sie daher
git tag -a new old^{}
anstelle vongit tag new old
(Dies liegt daran, dass mit Anmerkungen versehene Tags Objekte sind, während Lightweight-Tags dies nicht sind. Weitere Informationen finden Sie in dieser Antwort ).quelle
git push origin :refs/tags/old
kann vereinfacht werden,git push origin :old
denke ich.git tag new old
wird ein Tag erstellt, das auf das alte Tag verweist, nicht auf das Commit des alten Tags. (Siehe Warum kann ich mein Tag nicht von der Git-Die ursprüngliche Frage war, wie ein Tag umbenannt werden kann, was einfach ist: Erstellen Sie zuerst NEW als Alias von OLD:
git tag NEW OLD
Löschen Sie dann OLD:git tag -d OLD
.Das Zitat in Bezug auf "den Git-Weg" und (In-) Vernunft ist falsch, da es darum geht, einen Tag-Namen beizubehalten, ihn jedoch auf einen anderen Repository-Status verweisen zu lassen.
quelle
git push origin
Geschäft einschließt .git tag new old
wird ein Tag erstellt, das auf das alte Tag verweist, nicht auf das Commit des alten Tags. (Siehe Warum kann ich mein Tag nicht von der Git-Neben den anderen Antworten:
Zuerst müssen Sie einen Alias des alten Tag-Namens erstellen , der auf das ursprüngliche Commit verweist:
Dann müssen Sie die alte lokal löschen :
Löschen Sie dann das Tag an Ihren Remote-Standorten:
Schließlich müssen Sie Ihr neues Tag zum Remotestandort hinzufügen. Bis Sie dies getan haben, werden die neuen Tags nicht hinzugefügt:
Iterieren Sie dies für jeden entfernten Standort.
Beachten Sie die Auswirkungen einer Git-Tag-Änderung auf die Verbraucher eines Pakets!
quelle
git tag new old
wird ein Tag erstellt, das auf das alte Tag verweist, nicht auf das Commit des alten Tags. (Siehe Warum kann ich mein Tag nicht von der Git-git tag new old^{}
, brauchen wir nichtgit tag new_tag_name old_tag_name
(den ersten Schritt).Wenn es veröffentlicht ist, können Sie es nicht löschen (ohne zu riskieren, dass es geteert und gefiedert wird). Der 'Git Weg' ist zu tun:
Alternative,
Es ist so verrückt, weil:
Mit freundlicher Genehmigung der Manpages .
quelle
Diese Wiki-Seite hat diesen interessanten Einzeiler, der uns daran erinnert, dass wir mehrere Refs pushen können :
Die Idee ist also zu pushen:
<new-tag>
für alle Commits, auf die verwiesen wird von<old-tag
> :<refs/tags/old-tag>:<refs/tags/new-tag>
,<old-tag>
::<refs/tags/old-tag>
Siehe als Beispiel " Namenskonvention von Tags in einem Git-Repository ändern? ".
quelle
git cat-file -p <tag>
. Mit Ihrer Methode auf meinem System erhalte ich zwar das 'umbenannte' Tag ref (<new-tag>
), aber das Tag- Feld ist noch vorhanden<old-tag>
.Als Ergänzung zu den anderen Antworten habe ich einen Alias hinzugefügt, um alles in einem Schritt zu erledigen, mit einem vertrauten Gefühl des * nix-Bewegungsbefehls. Argument 1 ist der alte Tag-Name, Argument 2 ist der neue Tag-Name.
Verwendungszweck:
quelle
!sh
(Frage betraf Windows Git), aber nach dem Aktualisieren des Formats auf Folgendes funktionierte es :renametag = "!f() { git tag $2 $1; git tag -d $1; git push origin :refs/tags/$1; git push --tags; }; f"
.Befolgen Sie den dreistufigen Ansatz für ein oder mehrere Tags.
Schritt 1: Identifizieren Sie die Commit- / Objekt-ID des Commits, auf das das aktuelle Tag zeigt
Schritt 2: Löschen Sie das Tag aus dem Repository
Schritt 3: Erstellen Sie ein neues Tag, das auf dieselbe Commit-ID verweist, auf die das alte Tag zeigte
Sobald der lokale Git mit der Änderung des Tag-Namens fertig ist, können diese Änderungen an den Ursprung zurückgeschoben werden, damit andere sie übernehmen können.
quelle
git push origin :refs/tags/v0.1.0-Demo
und Tags zurückzuschieben (mit anderen ausstehenden Dingen)git push --tags
Für die Abenteuerlustigen kann es in einem Befehl ausgeführt werden:
quelle
git gc
kurzem gelaufen sindcp
), bei denen die Nachricht des Betreuers unberührt bleibt.Unabhängig von den Problemen beim Verschieben von Tags und beim Umbenennen von Tags, die bereits verschoben wurden, können Sie das zu umbenennende Tag, falls es sich um ein kommentiertes Tag handelt, zunächst mithilfe der folgenden einzeiligen Befehlszeile kopieren:
Dann müssen Sie nur noch das alte Tag löschen:
Ich habe diese Befehlszeile dank der folgenden zwei Antworten gefunden:
Bearbeiten:
Nachdem Probleme bei der automatischen Synchronisierung der Tag-Einstellungen aufgetreten sind
fetch.pruneTags=true
(wie unter https://stackoverflow.com/a/49215190/7009806 beschrieben ), empfehle ich persönlich, zuerst das neue Tag auf den Server zu kopieren und dann das alte zu löschen. Auf diese Weise wird das neue Tag beim Löschen des alten Tags nicht zufällig gelöscht, und eine Synchronisierung der Tags möchte das neue Tag löschen, das sich noch nicht auf dem Server befindet . So bekommen wir zum Beispiel alle zusammen:quelle
Sie können Remote-Tags auch umbenennen, ohne sie auszuchecken, indem Sie das alte Tag / den alten Zweig in einen neuen Namen duplizieren und den alten in einem einzigen löschen
git push
.Remote - Tag Umbenennungs / Remote Zweig → Tag Umwandlung: (Hinweis:
:refs/tags/
)Remote - Zweig Umbenennungs / Remote - Tag → Zweig Umwandlung: (Hinweis:
:refs/heads/
)Ausgabe zum Umbenennen eines Remote-Tags:
quelle