Befestigung git Doppel-commit-Historie
Ich hatte zu tun, führen Sie git filter-branch
den anderen Tag. Ich folgte den Anweisungen auf github, aber etwas ging schief. Ich denke jemanden im team nicht laufen rebase auf einem lokalen Zweig, und stattdessen werden die änderungen zusammengeführt. Seitdem das commit-log ist gefüllt mit Doppel-verpflichtet werden, z.B.:
commit b0c03ec925c0b97150594a99861d8f21fd3ab22d
Author: XXX
Date: Wed Mar 19 17:01:52 2014 -0400
Removed most clearfixs in templates
commit f30c21d21b5ea715a99b0844793cb4b5f5df97a1
Author: XXX
Date: Wed Mar 19 17:01:52 2014 -0400
Removed most clearfixs in templates
commit 2346be43d0e02d3987331f0a9eeb2f12cd698ede
Author: XXX
Date: Wed Mar 19 16:40:26 2014 -0400
new redirect logic
commit 1383070b31bde1aaa9eda7c2a9bcb598dd72247b
Merge: d1e2eb6 94e07fe
Author: XXX
Date: Wed Mar 19 16:28:41 2014 -0400
Merge branch 'develop' of github.com:xxx/xxx into develop
commit 79ce7824688cf2a71efd9ff82e3c7a71d53af229
Merge: 6079061 1ed3967
Author: XXX
Date: Wed Mar 19 16:28:41 2014 -0400
Merge branch 'develop' of github.com:xxx/xxx into develop
commit d1e2eb645a4fe2a1b3986082d0409b4075a0dbc9
Author: XXX
Date: Wed Mar 19 16:28:36 2014 -0400
Fixed broken responsiveness for companies listing page and code refactoring.
commit 6079061f6ef1f856f94d92bc0fdacf18854b8a89
Author: XXX
Date: Wed Mar 19 16:28:36 2014 -0400
Fixed broken responsiveness for companies listing page and code refactoring.
Sonderbar genug, nicht alle commits, die verdoppelt-up, wie "neue Logik umleiten" vor. Gibt es irgendetwas, was ich tun kann um dies zu beheben? Es ist relativ unkritisch, aber jetzt ist unsere commit Historie sieht wie Mist. Diese SO ein post vorgeschlagen, nur verlassen es wie es ist, aber ich würde lieber einen sauberen commit-Historie, zum Wohle der Nachwelt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Befehl zu vollbringen, ist:
Dadurch öffnet sich dein editor mit so etwas wie dies:
Nun kann man sagen, git, was zu tun ist mit jedem commit. Lass uns den verpflichten f392171, das einzige, wo wir Hinzugefügt unsere Funktion. Wir werden squash die folgenden beiden commits in den ersten ein - verlassen Sie uns mit einem sauber.
Ändern Sie Ihre Datei in dieses:
Wenn Sie speichern und beenden Sie den editor, Git gilt alle zwei verpasst, und dann bringt Sie zurück in den editor zum Zusammenführen der drei commit-Nachrichten:
Wenn Sie fertig sind, speichern Sie und beenden Sie Ihren editor. Git wird jetzt squash die commits in einem. Fertig!
Dann haben Sie zu tun
Kraft Ihres lokal commit-änderungen in entfernten Niederlassungen.
Hinweis: Sie brauchen, um einen Kürbis zu jedem dupliziert Begehen.
Removed most clearfixs in templates
ist man auf Linie 4512, die anderen 6683. Gibt es eine Möglichkeit dieses Problem zu beheben? Ich bin auch besorgt, dass es könnte ein Fall, wo wir zwei commits mit der gleichen Nachricht, aber verschiedenen Inhalten, in dem Fall wollen wir nicht squash. Gibt es eine Möglichkeit zu prüfen?git commit --amend
. Diese öffnen Sie einen editor und speichern Sie die Datei mit dem neuen Namen des commit.git log
zeigt die Doppel-verpflichtet, neben einander, die log-Datei generiert, die durch das rebase-Befehl nicht - Sie werden in sehr verschiedenen Orten in der log-Datei. Für die zweite Frage, ist es, dass im Laufe der Geschichte hatten wir schon verpflichtet mit sehr unterschiedlichen Veränderungen mit der gleichen Meldung - z.B. merges, haben in der Regel die gleiche Meldung. Ich bin nicht daran interessiert, die Umbenennung dieser so viel wie, zu prüfen, welche redundant sind. Gibt es eine Möglichkeit zu zeigen Sie die Zusammenfassung der änderungen in der log-Datei vielleicht?git rebase -i
. Auf der anderen Seite zu sehen, wenn der begeht gleich sind oder nicht, würde ichgitg
tool, um zu überprüfen, die commits, die den gleichen Namen und überprüfen Sie, ob diese verpflichtet haben, die gleichen Veränderungen. Ich weiß nicht, ob es eine tool, um automatisch zu vergleichen.Antwort von @VAIRIX perfekt ist, aber es gibt komplexe Fälle, in denen doppelte begeht, erscheint nicht neben einander, so dass die Quetschung nicht helfen.
So dass die Einnahme von unterhalb der Geschichte (unter der Annahme einer~ ist Duplikat von a)
Befehl zu Folgen: (wie gesagt, in der Antwort von @VAIRIX oder unten, wenn Sie möchten, Stellungswechsel mit master)
git rebase master -i
(Besser Folgengit rebase -i HEAD~n
zu vermeiden rebasierung Kopfschmerzen)Jetzt!
1) squash wiederholt begeht, wie unten:
Nun, dies wird squash Ihre commits in c
In meinem Fall c~ war anti-commit von c, so dass ich nur zu tun hatte, den Vorgang erneut, aber nun statt squash mit
s
ich bin fallenlassen der commit mitd
Nun, Sie Geschichte entfernen, entfernen Sie alle doppelten verpflichtet. Jetzt können Sie vergleichen mit der Herkunft Zweig Sie hatte mit
git diff
hatte doppelten verpflichtet gegen Ihre dieser Branche. Es sollte keine diff, wenn Sie Taten es perfekt.Dieser Prozess mag ein wenig länger dauern, aber Sie sind sicher, dass Sie nicht verpassen Sie nichts verpflichtet.