Ich habe aus Versehen in den falschen Branch committet. Wie kann ich diesen Commit löschen?
Antworten
Zu viele Anzeigen?Zu Ihrer Information, ich glaube, Sie können "hart schneiden" Commits nicht nur mit git reset --hard aus Ihrem aktuellen Branch nehmen, sondern auch mit folgendem Befehl:
git checkout -B
Tatsächlich, wenn Sie nicht daran interessiert sind, auszuchecken, können Sie den Branch mit folgendem Befehl auf was auch immer Sie möchten setzen:
git branch -f
Dies wäre ein programmatischer Weg, um Commits aus einem Branch zu entfernen, zum Beispiel, um neue Commits darauf zu kopieren (unter Verwendung von rebase).
Angenommen, Sie haben einen Branch, der von master getrennt ist, weil Sie Quellen aus einem anderen Ort genommen und in den Branch eingefügt haben.
Jetzt haben Sie einen Branch, auf dem Sie Änderungen angewendet haben, nennen wir ihn "thema".
Jetzt werden Sie eine Kopie Ihres Thema-Branches erstellen und ihn dann auf den Quellcodedump umstellen, der im Branch "dump" liegt:
git branch topic_duplicate topic
git rebase --onto dump master topic_duplicate
Jetzt werden Ihre Änderungen im Branch topic_duplicate basierend auf dem Ausgangspunkt von "dump" wieder angewendet, aber nur die Commits, die seit "master" passiert sind. Also werden Ihre Änderungen seit master wieder auf "dump" angewendet, aber das Ergebnis landet in "topic_duplicate".
Dann könnten Sie "dump" durch "topic_duplicate" ersetzen, indem Sie folgendes tun:
git branch -f dump topic_duplicate
git branch -D topic_duplicate
Oder mit
git branch -M topic_duplicate dump
Oder einfach durch Ablehnen des Dumps
git branch -D dump
Vielleicht könnten Sie auch einfach cherry-picken, nachdem Sie den aktuellen "topic_duplicate" gelöscht haben.
Was ich versuche zu sagen ist, dass wenn Sie den aktuellen "Duplikat"-Branch basierend auf einem anderen Vorfahren aktualisieren möchten, müssen Sie zuerst die zuvor "cherrypickten" Commits löschen, indem Sie einen git reset --hard
oder git branch -f topic_duplicate
machen und dann die anderen Commits (vom Hauptthema-Branch) entweder durch Rebase oder Cherry-Picking kopieren.
Rebase funktioniert nur auf einem Branch, der bereits die Commits hat, also müssen Sie Ihren Thema-Branch jedes Mal duplizieren, wenn Sie das tun möchten.
Cherry-Picking ist viel einfacher:
git cherry-pick master..topic
Also wird die gesamte Sequenz darauf hinauslaufen:
git reset --hard
git cherry-pick master..topic
Wenn Ihr Thema-Duplikat-Branch ausgecheckt wurde. Das würde zuvor-cherry-gepickte Commits vom aktuellen Duplikat entfernen und alle Änderungen, die in "thema" geschehen, einfach wieder auf Ihren aktuellen "dump" (anderer Vorfahre) anwenden. Es scheint ein ziemlich bequemer Weg zu sein, Ihre Entwicklung auf dem "echten" Upstream-Master zu basieren, während Sie einen anderen "downstream" Master verwenden, um zu überprüfen, ob Ihre lokalen Änderungen auch noch zutreffen. Alternativ könnten Sie einfach einen Diff erzeugen und dann außerhalb eines Git-Source-Baums anwenden. Aber auf diese Weise können Sie eine aktualisierte modifizierte (gepatchte) Version behalten, die auf der Version Ihrer Distribution basiert, während Ihre eigentliche Entwicklung gegen den wirklichen Upstream-Master gerichtet ist.
Also nur zur Demonstration:
- reset wird Ihren Branch auf einen anderen Commit zeigen lassen (--hard überprüft auch den vorherigen Commit, --soft hält hinzugefügte Dateien im Index (die beim nächsten Commit mitkommi tiert würden) und der Standardwert (--mixed) wird den vorherigen Commit nicht auschecken (löscht Ihre lokalen Änderungen), aber er wird den Index leeren (noch nichts wurde für den Commit hinzugefügt)
- Sie können einen Branch einfach zwingen, auf einen anderen Commit zu zeigen
- Sie können dies auch sofort machen, während Sie auf diesen Commit auschecken
- rebase funktioniert auf den Commits in Ihrem aktuellen Branch
- cherry-picking bedeutet, von einem anderen Branch zu kopieren
Hoffentlich hilft dies jemandem. Ich wollte dies neu schreiben, aber ich schaffe es jetzt nicht. Grüße.
- See previous answers
- Weitere Antworten anzeigen