Stellen Sie sich also Folgendes vor (und dass wir alle SourceTree verwenden):
- Wir arbeiten alle an der Entstehung / Entwicklung.
- Ich mache eine Woche Urlaub.
- Mein Kollege hat in den letzten Tagen vor Ort gearbeitet, ohne Herkunft / Entwicklung wieder in seiner lokalen Entwicklungsabteilung zusammenzuführen.
- Er versucht einen Push zu machen, bekommt die Anweisung, dass er zuerst verschmelzen muss und macht dann einen Pull.
- Er bekommt einen Konflikt und stoppt das automatische Festschreiben nach dem Zusammenführen.
- Unter der Annahme, dass Git wie SVN ist, verwirft mein Kollege die "neuen" Dateien in seiner Arbeitskopie und schreibt dann die Zusammenführung fest.
- Zu dieser Überarbeitung kommt noch eine Woche Entwicklungsarbeit.
- Ich komme aus den Ferien zurück und stelle fest, dass einige Tage meiner Arbeit fehlen.
Wir sind alle sehr neu in Git (dies ist unser erstes Projekt, das es verwendet), aber was ich getan habe, um es zu beheben, war:
- Benennen Sie "develop" in "develop_old" um.
- Füge develop_old zu einem neuen Zweig "develop_new" zusammen.
- Setzen Sie den Zweig "develop_new" auf den letzten Commit vor der fehlerhaften Zusammenführung zurück.
- Cherry wählt jedes Commit seitdem einzeln aus und löst Konflikte von Hand.
- Drücken Sie "Develop_old" und "Develop_New" bis zum Ursprung.
Jetzt ist develop_new, so hoffe ich, eine "gute" Kopie aller unserer Änderungen, die in den folgenden Wochen erneut durchgeführt wurden. Ich gehe auch davon aus, dass "Reverse Commit" bei einer Zusammenführung seltsame Dinge bewirken wird, zumal die Arbeit der nächsten Wochen darauf basiert - und da diese Zusammenführung eine Menge Dinge enthält, die wir wollen, zusammen mit Dingen, die wir nicht tun. ' t.
Ich hoffe, dass dies nie wieder vorkommt, aber wenn es doch wieder vorkommt, würde ich gerne eine einfachere / bessere Möglichkeit zur Fehlerbehebung finden. Gibt es eine bessere Möglichkeit, eine "schlechte" Zusammenführung rückgängig zu machen, wenn im Repo aufgrund dieser Zusammenführung viel Arbeit geleistet wurde?
git log
mit entsprechenden Anmerkungen zu den Ereignissen bei den verschiedenen Commits veröffentlichen? (Ich würde redigieren / kommentierengit log --graph --pretty=oneline --abbrev-commit
und von dort aus gehen)