Wie markiere ich ein älteres Commit in Git?

949

Wir sind neu in Git und ich möchte ein Tag am Anfang unseres Repositorys setzen. Unser Produktionscode ist der gleiche wie das anfängliche Repository, aber wir haben seitdem Commits gemacht. Ein Tag am Anfang würde es uns ermöglichen, die Produktion auf einen bekannten, stabilen Zustand zurückzusetzen.

Wie füge ich einem beliebigen, älteren Commit ein Tag hinzu?

hogsolo
quelle
Ich bin hierher gekommen, um Hilfe beim Löschen eines alten Tags lokal und auf einer Fernbedienung zu suchen, und fand dies schließlich nützlich. Vielleicht hilft es auch jemand anderem: gist.github.com/mobilemind/7883996
Aleksander Lidtke
1
Und vergessen Sie nicht, wie Sie ein Tag mit Git in ein Remote-Repository verschieben. weil Git kein Tag pusht, ohne etwas Besonderes zu tun.
JWW
Mit dem Commit-Hash können Sie älteren Commits ein Tag hinzufügen. Hier ist die Syntax dafür: git tag -a <tagName> -m "tag message" <Commit-Hash> Für grundlegendere bis fortgeschrittene ist hier die Referenz abhisheksharma.online/git-tags
Abhishek Sharma

Antworten:

1510

Beispiel:

git tag -a v1.2 9fceb02 -m "Message here"

Wo 9fceb02ist der Anfang der Commit-ID?

Sie können das Tag dann mit verschieben git push origin v1.2.

Sie können git logalle Commit-IDs in Ihrem aktuellen Zweig anzeigen.

Es gibt auch ein gutes Kapitel zum Markieren im Pro Git-Buch.

Warnung: Dadurch werden Tags mit dem aktuellen Datum erstellt (und dieser Wert wird beispielsweise auf einer GitHub-Veröffentlichungsseite angezeigt). Wenn Sie möchten, dass das Tag mit dem Festschreibungsdatum datiert wird, sehen Sie sich bitte eine andere Antwort an .

dkinzer
quelle
45
Sie können dies auch im Kontextmenü von gitk tun - praktisch, wenn Sie den SHA1 trotzdem so finden.
Cascabel
62
Lassen Sie das -aund die -m "Message here"Teile weg, wenn Sie keine Nachricht hinzufügen möchten:git tag v1.2 9fceb02
Devius
3
Sie können auch die vollständige Festschreibungs-ID verwenden.
j08lue
1
@devius Was ist der Unterschied zwischen -aund -m. Die Manpage scheint zu sagen, dass -aimpliziert ist, wann -mverwendet wird.
John Strood
7
git push --tags origin masterwürde alle Tags auf dem lokalen Zweig auf Remote verschieben. Ziehen Sie es vor git push origin <tag_name>, nur das erstellte Tag zu verschieben. Siehe: stackoverflow.com/a/5195913/452708 , git-scm.com/book/en/v2/Git-Basics-Tagging
Abhijeet
144

Nur der Code

# Set the HEAD to the old commit that we want to tag
git checkout 9fceb02

# temporarily set the date to the date of the HEAD commit, and add the tag
GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" \
git tag -a v1.2 -m"v1.2"

# set HEAD back to whatever you want it to be
git checkout master

Einzelheiten

Die Antwort von @dkinzer erstellt Tags, deren Datum das aktuelle Datum ist (als Sie den git tagBefehl ausgeführt haben), nicht das Datum des Commits. Die Git-Hilfe für taghat einen Abschnitt "On Backdating Tags", der besagt:

Wenn Sie einige Änderungen aus einem anderen VCS importiert haben und Tags für Hauptversionen Ihrer Arbeit hinzufügen möchten, ist es hilfreich, das Datum anzugeben, das in das Tag-Objekt eingebettet werden soll. Solche Daten im Tag-Objekt wirken sich beispielsweise auf die Reihenfolge der Tags in der Gitweb-Schnittstelle aus.

Um das in zukünftigen Tag-Objekten verwendete Datum festzulegen, legen Sie die Umgebungsvariable fest GIT_COMMITTER_DATE(siehe die spätere Erörterung möglicher Werte; die häufigste Form ist "JJJJ-MM-TT HH: MM").

Zum Beispiel:

$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1

Die Seite "Wie man in Git taggt" zeigt uns, dass wir die Zeit des HEAD-Commits extrahieren können über:

git show --format=%aD  | head -1
#=> Wed, 12 Feb 2014 12:36:47 -0700

Wir könnten das Datum eines bestimmten Commits extrahieren über:

GIT_COMMITTER_DATE="$(git show 9fceb02 --format=%aD | head -1)" \
git tag -a v1.2 9fceb02 -m "v1.2"

Anstatt das Festschreiben zweimal zu wiederholen, scheint es jedoch einfacher zu sein, den HEAD einfach in dieses Festschreiben zu ändern und es implizit in beiden Befehlen zu verwenden:

git checkout 9fceb02 

GIT_COMMITTER_DATE="$(git show --format=%aD | head -1)" git tag -a v1.2 -m "v1.2"
Phrogz
quelle
4
@ColonelPanic, dein Wunsch ist mein Befehl! github.com/lucasrangit/git-custom-commands/blob/master/…
Lucas
Wenn Sie Github zum Verwalten von Releases verwenden und sich um das auf der Seite / Tags Ihres Projekts angezeigte Datum kümmern, ist das Festlegen von GIT_COMMITTER_DATE besonders wichtig!
Lesley
2
@ColonelPanic Ich habe dir eine Gegenstimme für das Wortspiel gegeben und wünschte, ich könnte dir eine zweite für den Code geben, aber ein Github-Star muss das tun.
andyhasit
96

Der einfachste Weg, dies zu tun, ist:

git tag v1.0.0 f4ba1fc

mit f4ba1fcwobei der Beginn der Hash - Wert des begehen möchten Sie Tag und v1.0.0ist die Version , die Sie Tag möchten.

PatrickNLT
quelle
Perfekt danke :).
Saleh Enam Shohag
36

OK , Sie können einfach tun:

git tag -a <tag> <commit-hash>

Wenn Sie also Tag: 1.0.2 zum Festschreiben hinzufügen möchten, e50f795tun Sie einfach Folgendes:

git tag -a 1.0.2 e50f795

Außerdem fügen Sie am Ende eine Nachricht hinzu , indem Sie Folgendes verwenden-m :

git tag -a 1.0.2 e50f795 -m "my message"

Schließlich müssen Sie es auf die schieben, um das remotezu tun, tun Sie einfach:

git push origin 1.0.2 

Wenn Sie viele Tags haben, die Sie nicht einzeln erwähnen möchten, tun Sie einfach Folgendes:

git push origin --tags

alle Tags zusammenschieben ...

Außerdem habe ich die Schritte im Bild unten erstellt, um die Schritte genauer zu erläutern: Erstellen eines Tags für einen Commit-Hash

Sie können das Tag auch in Hub oder mithilfe von Tools wie SourceTree ausführen . Um die vorherigen Schritte zu vermeiden, habe ich mich in diesem Fall bei meinem Bitbucket angemeldet und dies von dort aus getan:

  1. Gehen Sie zu Ihrer Zweigstelle und suchen Sie das Commit , zu dem Sie das Tag hinzufügen möchten, und klicken Sie darauf:

Finden Sie Ihr Commit in Bitbucket

  1. In der Seite verpflichten , auf der rechten Seite finden , wo es heißt , No tagsund klicken Sie auf das +Symbol:

Finden Sie heraus, wo es heißt Keine Tags

  1. Fügen Sie im Feld Tag-Name Ihr Tag hinzu:

Tag-Namen hinzufügen

  1. Jetzt sehen Sie, dass das Tag erfolgreich erstellt wurde:

Geben Sie hier die Bildbeschreibung ein

Alireza
quelle
11

Dies ist eine alte Frage, und die Antworten haben bereits alle Arbeit gegeben, aber es gibt auch eine neue Option, die in Betracht gezogen werden kann.

Wenn Sie SourceTree zum Verwalten Ihrer Git-Repositorys verwenden, können Sie mit der rechten Maustaste auf ein Commit klicken und ihm ein Tag hinzufügen. Mit einem weiteren Mausklick können Sie das Tag auch direkt an den Zweig am Ursprung senden.

Stephan Bijzitter
quelle
6

Aufbauend auf den Antworten der anderen ist hier eine Einzeiler-Lösung, die das Tag-Datum auf den Zeitpunkt festlegt, an dem es tatsächlich passiert ist, ein kommentiertes Tag verwendet und Folgendes erfordert git checkout:

tag="v0.1.3" commit="8f33a878" bash -c 'GIT_COMMITTER_DATE="$(git show --format=%aD $commit)" git tag -a $tag -m $tag $commit'
git push --tags origin master

Dabei tagwird die gewünschte Tag-Zeichenfolge und commitder Commit-Hash festgelegt.

Stason
quelle
3

Die Antwort von @Phrogz ist großartig, funktioniert aber unter Windows nicht. So kennzeichnen Sie ein altes Commit mit Powershell mit dem ursprünglichen Datum des Commits:

git checkout 9fceb02
$env:GIT_COMMITTER_DATE = git show --format=%aD | Select -First 1
git tag v1.2
git checkout master
ccoxtn
quelle