Hier ist mein Szenario. Ich arbeite gegen Zweig A. Ich habe einen Feature-Zweig lokal von Zweig B in Zweig A zusammengeführt. Danach habe ich ein paar Änderungen am Zweig A gemacht und ein Commit Y gemacht. Ich bemerkte, dass die Zusammenführung Probleme verursachte und ich muss mache diese Zusammenführung rückgängig und belasse nur das Y-Commit. Ich habe nicht von lokalen zu entfernten Zweig geschoben. Alle Änderungen betreffen die ausgehenden Commits. Wie kann ich das tun, ohne die Arbeit am Commit Y zu verlieren, sondern nur diese zu schieben? dankEntfernen Sie bestimmte lokale Commits mit Git
BTW: Ich bin mit Source-Tree (ich weiß, vielleicht wird dies eine Befehlszeile, aber wenn jemand weiß, wie man das Quellbaum verwenden, das wäre genial)
Dies ist die richtige Antwort (benutze 'git rebase -i'), aber du musst das Merge-Commit nicht explizit löschen, da' git rebase -i' es für dich tun wird: Der Standardwert für rebase ist zu verwerfen verschmilzt. Die Verwendung von 'git rebase -p' versucht, Merges beizubehalten (es muss sie * neu erstellen, was einige kleinere Gefahren mit sich bringt), aber es ist generell unklug, das mit 'git rebase -i' zu kombinieren. – torek
Ich werde dies als einen separaten Kommentar einfügen, da es eine separate Idee ist: Anstatt zu einem anderen Repository zu gehen, ist es einfacher, einen neuen Zweignamen zu erstellen, um die aktuelle Commit-Kette zu erhalten. Führen Sie einfach 'git branch saveme' aus, bevor Sie Ihre' git rebase -i' starten. Wenn Ihre Nachzahlung abgeschlossen ist, wird der Zweig "Saveme" Ihre ursprünglichen (Pre-Rebase) Commits haben, und Ihre aktuelle Filiale wird Ihre neuen (Post-Rebase) Kopien haben. Wenn alles gut ist, kannst du dann 'Gespeicherte Datei ablegen- um die gespeicherten Originale zu werfen. (In der Tat, Rebase speichert Ihre Originale für Sie unter dem speziellen Namen 'ORIG_HEAD'.) – torek