it-swarm.com.de

Wie markiere ich ein älteres Commit in Git?

Wir sind neu in Git, und ich möchte ein Tag am Anfang unseres Repositorys setzen. Unser Produktionscode ist derselbe wie der Anfang des 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 kann man also einem beliebigen älteren Commit ein Tag hinzufügen?

843
hogsolo

Beispiel:

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

Wobei 9fceb02 der Anfangsteil der Festschreibungs-ID ist.

Sie können das Tag dann mit git Push Origin v1.2 verschieben.

Sie können git log ausführen, um alle Festschreibungs-IDs in Ihrem aktuellen Zweig anzuzeigen.

Es gibt auch ein gutes Kapitel über Tagging im Pro Git-Buch.

Warnung: Dadurch werden Tags mit dem aktuellen Datum erstellt (und dieser Wert wird auf einem GitHub angezeigt Seite freigibt, zum Beispiel). Wenn Sie möchten, dass das Tag mit dem Festschreibungsdatum datiert ist, lesen Sie bitte eine andere Antwort .

1365
dkinzer

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 (wenn Sie den Befehl git tag ausgeführt haben), und nicht das Datum des Commits . Die Git-Hilfe für tag enthält einen Abschnitt "On Backdating Tags", der lautet:

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-Oberfläche aus.

Um das in zukünftigen Tag-Objekten verwendete Datum festzulegen, legen Sie die Umgebungsvariable GIT_COMMITTER_DATE fest (siehe die spätere Erläuterung 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 "How to Tag in Git" zeigt uns, dass wir die Zeit des HEADextrahieren können _ Festschreiben ü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, ist es einfacher, das HEAD 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"
120
Phrogz

Der einfachste Weg dies zu tun ist

git tag v1.0.0 f4ba1fc

wobei f4ba1fc der Anfang des Hashs des Commits ist, den Sie kennzeichnen möchten, und v1.0.0 die Version ist, die Sie kennzeichnen möchten.

83
PatrickNLT

Befehl verwenden:

git tag v1.0 ec32d32

Dabei ist v1.0 der Tagname und ec32d32 das Commit, das Sie taggen möchten

Sobald Sie fertig sind, können Sie die Tags verschieben, indem Sie:

git Push Origin --tags

Referenz:

Git (Versionskontrolle): Wie kann ich einen bestimmten vorherigen Festschreibungspunkt in GitHub kennzeichnen?

30

OK, Sie können einfach tun:

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

Wenn Sie also den Tag hinzufügen möchten: 1.0.2, um e50f795 festzuschreiben, tun Sie einfach Folgendes:

git tag -a 1.0.2 e50f795

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

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

Immerhin müssen Sie es auf remote schieben, um das zu tun, einfach tun:

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 in der Abbildung unten erstellt, um die Schritte zu verdeutlichen: creating tag on a commit hash

Sie können das Tag auch in Hub einfügen oder Tools wie SourceTree verwenden. Um die vorherigen Schritte zu umgehen, habe ich mich in diesem Fall bei meinem Bitbucket angemeldet und mache es von dort aus:

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

find your commit in bitbucket

  1. Suchen Sie auf der Festschreibungsseite rechts die Stelle, an der No tags steht, und klicken Sie auf das Symbol +:

find where it says No tags

  1. Fügen Sie im Feld für den Tag-Namen Ihren Tag hinzu:

add tag name

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

enter image description here

24
Alireza

Dies ist eine alte Frage, und die Antworten haben bereits alle Arbeit geleistet, 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 diesem ein Tag hinzufügen. Mit einem weiteren Mausklick können Sie das Tag auch direkt an die Origin-Verzweigung senden.

10

Aufbauend auf den Antworten der anderen ist hier eine einzeilige Lösung, die das Tag-Datum auf den tatsächlichen Zeitpunkt festlegt, kommentierte Tags verwendet und kein git checkout erfordert:

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 wird tag auf die gewünschte Tag-Zeichenfolge und commit auf den Commit-Hash gesetzt.

4
stason

Die Antwort von @Phrogz ist großartig, funktioniert aber nicht unter Windows. So kennzeichnen Sie einen alten 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
2
ccoxtn