In Git ist ein Branch ein Verweis auf einen Commit.
Wie kann ich einen bestimmten Zweig auf einen bestimmten Commit verweisen lassen? Angenommen, ich möchte master
Punkt bei 1258f0d0aae...
Wie kann ich das tun?
In Git ist ein Branch ein Verweis auf einen Commit.
Wie kann ich einen bestimmten Zweig auf einen bestimmten Commit verweisen lassen? Angenommen, ich möchte master
Punkt bei 1258f0d0aae...
Wie kann ich das tun?
Sie können master
Punkt bei 1258f0d0aae
auf diese Weise:
git checkout master
git reset --hard 1258f0d0aae
Aber man muss dabei vorsichtig sein. Es kann durchaus sein, dass die Geschichte dieses Zweigs neu geschrieben wird. Das würde zu Problemen führen, wenn Sie ihn veröffentlicht haben und andere Personen an dem Zweig arbeiten.
Auch die git reset --hard
verwirft alle nicht übertragenen Änderungen (d.h. diejenigen, die sich nur in Ihrem Arbeitsbaum oder im Index befinden).
Sie können auch eine Aktualisierung eines Zweigs mit erzwingen:
git branch -f master 1258f0d0aae
... aber Git lässt Sie das nicht tun, wenn Sie auf master
zu dieser Zeit.
Wenn Sie derzeit no auf dem Zweig Master, das ist super einfach:
git branch -f master 1258f0d0aae
Das ist genau das, was Sie wollen: Es zeigt master
bei der gegebenen Übergabe, und tut nichts anderes.
Wenn Sie derzeit auf Master sind, müssen Sie zuerst in den Zustand des losgelösten Kopfes kommen. Ich würde die folgenden zwei Befehle empfehlen:
git checkout 1258f0d0aae #detach from master
git branch -f master HEAD #exactly as above
#optionally reattach to master
git checkout master
Seien Sie sich jedoch bewusst, dass jede explizite Manipulation des Punktes einer Verzweigung dazu führen kann, dass Commits zurückbleiben, die nicht mehr von anderen Verzweigungen erreicht werden können und somit Gegenstand der Garbage Collection werden. Also, Denken Sie nach, bevor Sie tippen git branch -f
!
Diese Methode ist besser als die git reset --hard
Ansatz, da er nichts im Index oder Arbeitsverzeichnis zerstört.
Ich schließe mich der Lösung und den Kommentaren von Mark Longair an und empfehle jedem, diese zu lesen, bevor er handelt, aber ich würde vorschlagen, dass der Schwerpunkt auf folgenden Punkten liegen sollte
git branch -f <branchname> <commit>
Hier ist ein Szenario, in dem ich dies tun musste.
Sie entwickeln auf dem falschen Zweig und müssen ihn daher zurücksetzen.
Saubere Entwicklung und Veröffentlichung von Software.
Irrtum: Versehentlich auf dem Versionszweig bleiben, während man weiter entwickelt.
"OH NEIN! Ich habe versehentlich auf dem Release-Zweig entwickelt." Der Arbeitsbereich ist vielleicht mit halb geänderten Dateien vollgestopft, die eine laufende Arbeit darstellen und die wir nicht anfassen und durcheinanderbringen wollen. Wir möchten einfach nur, dass Git ein paar Zeiger umdreht, um den aktuellen Zustand zu verfolgen und den Release-Zweig wieder so zu machen, wie er sein sollte.
Erstellen Sie einen Zweig für die Entwicklung, der die bisherige Arbeit enthält, und wechseln Sie zu diesem Zweig.
git branch development
git checkout development
Jetzt sind wir in der Problemsituation und brauchen deren Lösung! Korrigieren Sie den Fehler (den Versionszweig mit der Entwicklung voranzutreiben) und stellen Sie den Versionszweig wieder so her, wie er sein sollte.
Korrigieren Sie den Versionszweig so, dass er auf die letzte echte Version zurückverweist.
git branch -f release release2
Der Release-Zweig ist nun wieder korrekt, wie hier ...
git push -f <remote> <branch>
ist in einem anderen Thread gut beschrieben, obwohl das Wort "überschreiben" im Titel irreführend ist. Erzwingen von "git push" zum Überschreiben entfernter Dateien
git reset --hard 1258f0d0aae
Aber Vorsicht, wenn der Nachkomme zwischen 1258f0d0aae
y HEAD
nicht in anderen Zweigen referenziert werden, ist es mühsam (aber nicht unmöglich), sie wiederherzustellen, daher sollten Sie besser einen "Backup"-Zweig im aktuellen HEAD
zur Kasse gehen master
und setzen Sie sie auf den gewünschten Wert zurück.
Stellen Sie außerdem sicher, dass Sie keine unbestätigten Änderungen haben, bevor eine reset --hard
sind sie wirklich verloren (keine Möglichkeit zur Wiederherstellung).
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.