2016-07-19 6 views
5

Ich habe 2 Zweige, master & feature. Der Meister erhält gelegentlich kleine Verbesserungen, die benötigt werden, um schnell zu leben. Sobald diese Optimierungen abgeschlossen sind, wird master in feature rebased, so dass die Funktion auf dem neuesten Stand gehalten wird.Entfernen Sie die doppelten Commits, die nach dem schlechten Rebase (s) eingeführt wurden

Die Dateien, die auf Master geändert werden, beziehen sich in der Regel nicht auf den Großteil der Entwicklung auf feature, aber ich habe eine hohe Anzahl von komplizierten 3-Wege-Merge-Konflikten erhalten.

Nach dem Blick auf das Commit-Protokoll von feature, habe ich das Problem gefunden, mehrere Duplikate zu sein, und ich versuche, es mit einer interaktiven Rebase zu lösen.

Meine Frage ist:

Ist dies die beste Lösung für das Problem, und wenn ja, kann ich die Duplikate einfach fallen und im Wesentlichen die Geschichte bauen, wie ich es aussehen erwarten? Auch welche Duplikate würde ich fallen lassen, höher (älteres Original) oder niedriger (neuere Duplikate).

Zusammenfassung Auflistung von git rebase master -i genommen:

pick 0eb277c Commit A 
pick ced2556 Commit B 
pick 640e049 Commit C 
pick b248ff7 Commit D 
pick 9903094 Commit E 
pick ebc279d Commit A 
pick 313385b Commit F 
pick 0d55178 Commit G 
pick c8f09f9 Commit H 
pick e877be3 Commit I 
pick 9859aa0 Commit J 
pick c3c8e0f Commit K 
pick 8abc68c Commit L 
pick 84a5c89 Commit A 
pick 30570e4 Commit B 
pick 937ff2f Commit C 
pick 8e6d911 Commit D 
pick 1dd3a09 Commit E 
pick fe79288 Commit F 
pick 9e790bb Commit G 
pick 0924916 Commit H 
pick 90d59d7 Commit I 
pick ba06c55 Commit J 
pick 7452fad Commit K ** Dupes end here** and features then has 30+ more commits. 
pick d1dca3d Commit M 
pick 6c85f76 Commit N 
pick ad53b78 Commit O 
pick f166471 Commit P 
+1

Sie können 'git rebase -i HEAD ~ x' verwenden, ersetzen Sie' x' mit der Anzahl der Commits, die Sie von oben nach unten sehen möchten. Beispiel: git rebase -i HEAD ~ 3' gibt Ihnen drei letzte Commits. Sie können dann auswählen, welche Commits Sie beibehalten möchten und welche Sie löschen möchten. –

+0

Commits 0eb277c und ebc279d sind als Commit A markiert, aber offensichtlich sind ihre sha1 unterschiedlich, also sind das verschiedene Commits. Tatsächlich sehe ich keine doppelten Commits in der Sha1-Liste. – Frodon

+0

Ich meine das Duplikat lose, die Commit-Nachrichten sind die gleichen und der Code, der angewendet wird, ist der gleiche. Aber es wird dupliziert und als neues Commit gespeichert. – Kiee

Antwort

4

So entfernen Sie das Duplikat verpflichtet Sie durch die Liste von git rebase master -i & Drop die Duplikate durch die Navigation nach oben und unten in der Liste mit den Pfeiltasten erzeugt gehen muss d über die Commits, die Sie möchten drop.

(master kann mit einem commmit Hash oder einer gültigen Rück Fußpunkt ersetzt werden)

Sobald Sie die Duplikate alle und eine Liste begehen gelöscht haben, die, wie Sie die Geschichte erwarten sieht Ausfahrt, aussehen Drücken Sie esc und geben Sie !wq ein und drücken Sie , geben Sie ein.

Die erneute Basis wird dann fortgesetzt und die Liste der Commits ed auf Ihren ReBase-Punkt angewendet.

Verwandte Themen