Viel einfachere Lösung mit git stash
Hier ist eine viel einfachere Lösung für Übertragungen in den falschen Zweig. Starten im Zweig master
die drei fehlerhafte Übertragungen aufweist:
git reset HEAD~3
git stash
git checkout newbranch
git stash pop
Wann ist dies zu verwenden?
- Wenn Ihr Hauptzweck darin besteht, ein Rollback durchzuführen
master
- Sie möchten Datei-Änderungen behalten
- Sie interessieren sich nicht für die Nachrichten über die falschen Übertragungen
- Sie haben noch nicht geschoben
- Sie wollen, dass Sie sich das leicht merken können
- Sie wollen keine Komplikationen wie temporäre/neue Zweige, das Finden und Kopieren von Commit-Hashes und andere Kopfschmerzen
Was dies bedeutet, nach Zeilennummer
- Macht die letzten drei Übertragungen (und ihre Nachrichten) an
master
und lässt dennoch alle Arbeitsdateien intakt
- Speichert alle Änderungen in der Arbeitsdatei und macht die
master
der Arbeitsbaum entspricht genau dem Zustand HEAD~3
- Wechselt zu einem bestehenden Abzweig
newbranch
- Wendet die versteckten Änderungen auf Ihr Arbeitsverzeichnis an und leert den Vorrat
Sie können nun Folgendes verwenden git add
et git commit
wie Sie es normalerweise tun würden. Alle neuen Übertragungen werden hinzugefügt zu newbranch
.
Was dies nicht tut
- Ihr Baum wird nicht durch zufällige, vorübergehende Äste verunstaltet.
- Die fehlerhaften Commit-Meldungen bleiben nicht erhalten, Sie müssen also eine neue Commit-Nachricht zu diesem neuen Commit hinzufügen
- Aktualisieren! Benutzen Sie die Pfeil-nach-oben-Taste, um durch Ihren Befehlspuffer zu blättern und die vorherige Übergabe mit ihrer Übergabemeldung erneut anzuwenden (danke @ARK)
Ziele
Der Auftraggeber gab an, dass das Ziel darin besteht, den Master auf den Stand vor den Übertragungen zurückzusetzen, ohne dass Änderungen verloren gehen, und diese Lösung erfüllt diese Aufgabe.
Ich mache das mindestens einmal pro Woche, wenn ich versehentlich neue Übertragungen an master
anstelle von develop
. Normalerweise habe ich nur einen Commit zum Rollback, in diesem Fall verwende ich git reset HEAD^
in Zeile 1 ist eine einfachere Möglichkeit, nur eine Übertragung zurückzunehmen.
Tun Sie dies nicht, wenn Sie die Änderungen des Masters upstream gepusht haben
Vielleicht hat jemand anderes diese Änderungen vorgenommen. Wenn Sie nur Ihren lokalen Master umschreiben, hat es keine Auswirkungen, wenn es upstream gepusht wird, aber das Pushen einer umgeschriebenen Historie an Mitwirkende kann Kopfschmerzen verursachen.
161 Stimmen
Anmerkung: Ich habe die gegenteilige Frage gestellt aquí
6 Stimmen
eddmann.com/posts/ dieser funktioniert
22 Stimmen
Wurden die Kommentare hier gelöscht? Ich frage, weil ich bei meinem zweimonatlichen Besuch dieser Frage immer an diesem Kommentar vorbeilaufe.
5 Stimmen
Nebenbemerkung: In der Frage geht es um einen sehr einfachen Fall. Wenn ich die Antworten lese und all die "tu das nicht, weil..." und "eine bessere Lösung ist..." und "Warnung mit Version n+..." gleich nach den Antworten (möglicherweise wenn es zu spät ist), scheint es mir, dass selbst sehr einfache Operationen keine einfachen Lösungen in Git haben. Ein grafischer Versionsverwalter, bei dem man einfach einen Tag für den neuen Zweig hinzufügen könnte, ohne sich mit einer mir obskur und archaisch erscheinenden Syntax auseinandersetzen zu müssen, wäre eine große Erleichterung. Mein Königreich und meine goldenen Abzeichen für den ersten, der git "forkt" und einen neuen Ansatz startet ;-) es ist dringend.
0 Stimmen
@mins Vielleicht ist TortoiseGit ein Schritt näher an dem, was Sie wollen. Das Schöne an Git ist, dass man die volle Kontrolle hat, aber das erfordert ein tieferes Verständnis und die Notwendigkeit, dass der Benutzer mit einer Befehlszeilenschnittstelle vertraut ist. Ich verwende Git nun schon seit einigen Jahren, aber ich verlasse mich immer noch auf die Dokumentation und/oder Stackoverflow, wenn ich weniger häufige Operationen durchführen muss. Ich arbeite gerne mit der Git-Befehlszeilenschnittstelle (ich verwende GitBash), da ich damit Dinge schnell erledigen kann. Zur Lösung von Konflikten wende ich mich jedoch an TortoiseGit, da ich dies einfacher finde.
3 Stimmen
Lesen Sie sich die ersten zehn Antworten (oder so) durch, denn die besten sind nicht die, die am meisten hochgestuft wurden.