Löschen aller commits in einem branch nach bestimmten commit
Ich bin eine schwierige Zeit greifen, wie ich verwenden können, Stellungswechsel/zurücksetzen, um dies zu erreichen.
War ich arbeiten, mein master
Zweig, und nach einer gewissen Begehen, meine software funktioniert nicht mehr. Ich Sie nicht verlieren wollte, die änderungen zu der Zeit und ich wurde unter Druck gesetzt, auf Zeit zu erreichen, ein Meilenstein also ging ich wieder ein paar commits mit git checkout
und erstellt einen neuen Zweig namens working
und begann drängen alle meine änderungen dort. Später erkannte ich, dass diese änderungen (auf der master
Zweig) wurden nicht benötigt. Jetzt will ich zurück zu meinem master-branch löschen Sie alle änderungen nach dem commit, die ich verwendet, um meine working
Zweig und dann fahren meine working
Zweig zu master
Zweig.
Ich habe ein Bild erstellt mit einem online-Foto-editor, um zu versuchen und zu erklären, was ich versuche zu tun. Ich hoffe, es hilft:
Ich will, dass alles nach 5cb967f. alles loswerden zwischen 5cb967f und a0c1de2 (nicht einschließlich dieser)
- Sind die nicht benötigten commits auf dem master noch nicht publiziert oder Sie sind nur in Ihrem privaten repo?
- Sie sind veröffentlicht. Ich habe nichts dagegen, die Geschichte umzuschreiben. Der Letzte commit in meinem
working
Zweig ist, was ich von nun an. Ich werde nichtcheckout
-ing in verpflichtet sich vor 5cb967f - Sind Sie der einzige, der mit dieser Arbeit oder haben andere Menschen wahrscheinlich zog begeht, die Sie löschen möchten?
- andere Leute haben gezogen, aber es ist okay. Ich bin der Hauptentwickler. Wenn Sie erhebliche Probleme ich haben werde Sie das Projekt löschen und ein neues erstellen und Klonen Sie das neue repository.
- Ihre text-markup nicht mit der Grafik -- das markup, sagt
a0c1de2
undc460070
sind sowohl auf dem master branch, mita3cb01e
als der master-Tipp, die Grafik nicht zeigen, ein Zweig Begehen übergeordnet aus jedem commit auf, was Sie beschreiben, wie der master-Zweig und nicht show-master selbst als aucha0cde2
. Niemand antwortete, für eine Geschichte, passend zu Ihrem text-Beschreibung, so dass ich fügte hinzu, ein auf der Grundlage, dass, aber es wäre einfacher, sicher zu sein, wenn man zeigen könnte, die Ergebnisse dergit show-branch master working
es wäre viel klarer, was hier vorgeht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zwei Möglichkeiten:
Die Geschichte umzuschreiben (destruktive)
Können Sie
git-rebase
, die Geschichte umzuschreiben, ommiting diese begeht. Sie können den interaktiven rebase. Aus deiner Beschreibung bin ich mir nicht sicher, genau das, was Sie inmaster
undworking
, aber ich gehe davon aus, dass alle die Geschichte (erwünschte und unerwünschte) vorhanden ist, die es gibt.Zu diesem Zeitpunkt Ihre
$EDITOR
wird pop-up mit einer Liste von commits, die vona0c1de2
auf den KOPF vonmaster
. Sie können entfernen Sie die Zeilen, derenc460070..a3cb10e
um Sie zu löschen aus der Geschichte.Ihre Geschichte wird umgeschrieben werden lokal. Wenn Sie versuchen, drücken Sie diese ändern, wird es ein non-fast-forward Updates.
Wiederherzustellen, die Erhaltung der Geschichte (non-destruktiv)
WENN Sie es vorziehen zu halten, die Geschichte, die Sie rückgängig machen können, eine Reihenfolge von commits:
Dadurch wird 7 neue verpflichtet, jeden durch das Rückgängigmachen der änderungen, die in diesen unerwünschten verpflichtet, in Ordnung.
Etwas über die Geschichte Grafik screwy. Geht durch den text-markup in es, was Sie wollen, ist einfach
weil es noch keine post-
working
-base-commits auf dem master, den Sie beibehalten möchten.