Ich möchte zu einem vorherigen Commit zurücksetzen, diesen Code veröffentlichen und dann zum letzten Commit zurückkehren.
Das heißt, mein Master zeigt auf eine ältere Commit-Version, nur damit ich diese Version veröffentlichen kann. Dann möchte ich zu dem letzten Commit zurückkehren, das ich ursprünglich war.
Wie kann ich das machen?
Ihre Frage ist unklar. Ich denke, was Sie verlangen, ist Folgendes:
Was wird das tun? Es drückt die
$old_commit_id
zu verpflichten ,origin
als neuen Leiter vonorigin
‚s -master
Zweig.Wenn Sie dies möchten, müssen Sie Ihre lokale
master
Niederlassung überhaupt nicht berühren .quelle
master (non-fast-forward)
Fehler für mich. @ jtdubs Lösung hat funktioniert.-f
es einfach , um es zu erzwingen - obwohl das Remote-Repo möglicherweise so konfiguriert ist, dass es dies verbietet. Ich habe die Antwort aktualisiert.verwenden
git reset --hard <old commit number>
Der HEAD wird auf dieses alte Commit zurückgesetzt.
git push -f origin
Darüber hinaus müssen Sie auch das Remote-Repo ändern.quelle
Wenn Sie Force Push vermeiden möchten, gehen Sie wie folgt vor, um Ihr Repo auf ein älteres Commit zurückzusetzen und alle dazwischen liegenden Arbeiten beizubehalten:
Getan! Ersetzen Sie 307a5cd durch das gewünschte Commit in Ihrem Repo.
(Ich weiß, dass die ersten beiden Zeilen kombiniert werden können, aber ich denke, das macht weniger klar, was los ist.)
Hier ist es grafisch:
Sie entfernen effektiv c3 und c4 und setzen Ihr Projekt wieder auf c2. C3 und c4 sind jedoch weiterhin in der Projekthistorie verfügbar, wenn Sie sie jemals wieder sehen möchten.
quelle
Angenommen, ein Commit-Diagramm wie folgt:
Sie möchten zuerst auschecken
master
und einen Zweig erstellen, der auf diemaster
aktuelle Position verweist :Sollte jetzt so aussehen:
Jetzt, da Sie bereits aktiv sind
master
, weisen wir denmaster
Zweig an, ein Commit rückwärts zu verschieben:Jetzt
master
sollte ein Leerzeichen zurück verschoben werden, aber derpointer
Zweig befindet sich noch im letzten Commit:An diesem Punkt können Sie
master
auf eine Fernbedienung drücken oder wo immer Sie sie dann schnell wieder in denpointer
Zweig zurückführen . Sie können denpointer
Zweig an diesem Punkt töten :Finale:
quelle
git push origin master
schlägt dies fehl, wenn sich die Spitze Ihres aktuellen Zweigs hinter seinem entfernten Gegenstück befindet . Sie sollten auch ein -f-Flag übergeben.Sie können einfach
git checkout <commit-id>
alles tun, was Sie tun müssen, und danngit checkout master
zum neuen Code zurückkehren.Wenn Sie den alten Code tatsächlich ändern müssen, um ihn freizugeben, sollten Sie wahrscheinlich:
Außerdem kann ich Git Flow nicht genug empfehlen . Das macht das alles ganz einfach.
quelle
So wechseln Sie zu einer früheren Version:
git checkout <version hash>
mach deine Arbeit hier und begebe sie mit
git commit --amend
Um zum Meister zurückzukehren :
git checkout master
quelle
git reset --hard
zeigte seinen Hauptzweig zurück auf das alte Commit,git checkout master
wird also nichts tun.commit --amend
Schritt ist nützlich genug--amend
?