Sagen wir also, ich habe einen Hauptzweig, den wir "Master" nennen. Ich habe einen Zweig gemacht, der "neues Feature" genannt wird. Ich habe eine Menge Commits in diesem Zweig gemacht, so dass ich in der Zeit zurückgehen kann, aber ich habe einiges hin und her während der Entwicklung der Funktion gemacht, so dass das Commit-Protokoll ziemlich unordentlich ist.
Wenn ich mir das ansehen würde git diff master ... neues Feature zum Beispiel.
Wenn ich nur einen neuen neuen Commit auf 'Master' erstellen möchte, der alle Änderungen zwischen den beiden Zweigen enthält, was ist der effizienteste Weg, dies zu tun?
Eine weitere Option, die für Sie besser funktionieren könnte, wäre, eine Patch-Datei mit git diff --patch > "patch filename"
zu erstellen und sie dann mit git apply "patch file name"
in Ihren Master-Zweig zu patchen.
Man-Seite für git-diff (besonders "Generieren von Patches mit -p"): Ссылка
Man-Seite für git-apply: Ссылка
Sie können dafür interaktives Rebase verwenden: git rebase --interactive
. Dann benutze einfach die Squash-Option. Es verwendet nur die Updates vom Commit, aber erstellt das Commit nicht.
Benutze git rebase --interactive HEAD ~ (aber viele Commits wollen Squash). zB git rebase - interactive HEAD ~ 5. Dadurch werden die letzten 5 Commits geladen und ein Editorfenster mit den Nachrichten geöffnet. Jede Nachricht wird am Anfang "auswählen". Gehe zur letzten Nachricht, ändere 'pick' in 'squash' und beende. Ein neues Fenster öffnet sich und fragt nach einer Commit-Nachricht. Dies wird die neue Commit-Nachricht der Squash-Commits sein. Beenden und es wird alle Commits in eine neue zerquetschen.
Hier ist ein Beispiel: Ссылка
Sie können alles in Ihrem Feature-Zweig festschreiben und dann in den Master einbinden, der 'ihres' für alle Änderungen akzeptiert.
Hier ist eine Stack Overflow-Frage mit einer großartigen Antwort darauf, wie man das macht: Gibt es eine "ihre" Version von "git merge -s unsere"?