In git habe ich Commits für den Hauptzweig vorgenommen, als ich eigentlich an einem Feature-Zweig hätte arbeiten sollen. Ich möchte dies ändern, damit der Master wieder dort ist, wo er begonnen hat, und was auf dem Master war, befindet sich jetzt in einem neuen Zweig. Grundsätzlich sieht mein Commit-Verlauf folgendermaßen aus:
A -- B -- C -- D -- E
| |
| master
origin/master
Und ich möchte, dass es so aussieht:
master
|
A -- B -- C -- D -- E
| |
| new_branch
origin/master
Wie kann ich ändern, wo Masterpunkte?
stash
undunstash
Teile nicht. Ansonsten perfekt: +1git reset --hard <commit>
war genau das, wonach ich gesucht habe..git/refs/
von Hand ändern (zum einen könnte eine bestimmte Referenz tatsächlich (in die.git/packed-ref
Datei) gepackt werden, anstatt „lose“ zu sein). Im Allgemeinen ist der Befehl mit der niedrigsten Ebene, den Sie zum Ändern einer Referenz verwenden sollten, entweder git update-ref oder git symbolic-ref . In diesem speziellen Fall ist es nicht erforderlich, mit Git-Interna zu mischen oder sogar die zuvor erwähnten Git-Installationsbefehle zu verwenden. Sie können es mit Git Branch tun :git branch -f master origin/master
.git branch -f master <commit>
hat den Trick für mich gemacht, danke!Versuchen Sie dies zum Beispiel
Dieses Beispiel zeigt, wie der Master auf ein anderes Commit verschoben wird. Beachten Sie hier, dass das Tag es uns ermöglicht, den alten Master für den Fall zu speichern :)
quelle
Wie hier beschrieben , aber noch einfacher, ohne Zurücksetzen. Erstellen Sie einfach einen neuen Zweig, in dem sich der Master befand, und löschen Sie dann den Master. Löschen Sie erneut den Ort, an den Sie den Master verschieben möchten, und erstellen Sie dort einen neuen Master-Zweig:
quelle
Gehen Sie zu .git / refs / Heads / Master, das den Hash von Master hat, und ändern Sie dies in das, was Sie wollen. Ich benutze gitg, um schnell den Hash des Masters zu finden und anschließend zu überprüfen, ob der Umzug erfolgreich war.
quelle
Erstellen Sie einen neuen Zweig
new_branch
am aktuellen HEAD (unter der Annahme, dass HEAD = Master ist), setzen Sie den Master auf C zurück und wechseln Sienew_branch
erneut zu (in Bezug auf SmartGit).quelle
Beachten Sie, dass Sie jederzeit ändern können, wohin ein Zweig zeigt, indem Sie verwenden
git update-ref refs/heads/branch id
. Bevor Sie dies tun, müssen Sie der Spitze des Baums einen Namen geben, da sonst auf Ihre Arbeit nicht zugegriffen werden kann. Diese beiden Befehle können also die Arbeit erledigenAber stellen Sie sicher, dass Sie keine nicht festgeschriebenen Änderungen haben, sonst bricht die Hölle los
quelle