Sourcetree - Rückgängigmachen nicht gedrückter Commits


208

Ich verwende Sourcetree für Windows für ein Git-Repository und möchte ein nicht verschobenes Commit rückgängig machen.

Ist das möglich? Wenn ich "Commit zurücksetzen" mache, wird ein zweites Commit erstellt, das das erste Commit zurücksetzt, aber ich möchte nicht, dass das erste Commit überhaupt in meiner Quellcodeverwaltung angezeigt wird.

Ich könnte mein lokales Repository auch löschen und es ohne mein lokales Commit erneut abrufen, aber vielleicht gibt es einen anderen Weg?


Ich habe einen ausführlichen Artikel mit Screenshots geschrieben. Teilen in der Hoffnung, dass es helfen würde: attosol.com/undo-in-git-using-sourcetree
Rahul Soni

Antworten:


345
  1. Klicken Sie mit der rechten Maustaste auf das Commit, auf das Sie zurücksetzen möchten (nicht auf das, das Sie löschen möchten!).
  2. Wählen Sie "Master auf dieses Commit zurücksetzen".
  3. Wählen Sie "Soft" Reset.

Ein Soft-Reset behält Ihre lokalen Änderungen bei.

Quelle: https://answers.atlassian.com/questions/153791/how-should-i-remove-push-commit-from-sourcetree

Bearbeiten

Info git revert: Dieser Befehl erstellt ein neues Commit, das andere Commits rückgängig macht. Wenn Sie beispielsweise ein Commit haben, das eine neue Datei hinzufügt, können Sie ein Commit erstellen, git revertmit dem die neue Datei gelöscht wird.

Informationen zum Anwenden eines Soft-Reset: Angenommen, Sie haben die Commits Afür E( A---B---C---D---E) und möchten das letzte Commit ( E) löschen . Anschließend können Sie zum Festschreiben einen Soft-Reset durchführen D. Bei einem Soft-Reset wird das Commit Eaus git gelöscht, die lokalen Änderungen bleiben jedoch erhalten. Weitere Beispiele finden Sie in der Dokumentation zum Zurücksetzen des Git .


34
Oder wenn Sie an einem Zweig arbeiten - "Aktuellen Zweig auf dieses Commit zurücksetzen"
Tom Auger

5
Ich verstehe diese Erklärungen zur Benutzeroberfläche so sehr nicht ... Das Zurücksetzen des aktuellen Zweigs auf dieses Commit klingt nicht so sehr, als würde das Commit gelöscht. Und es endete damit, was Sie mehr erwarten würden. Meine Arbeitskopie wurde auf das Commit zurückgesetzt, anstatt sie zu löschen.
MrFox

Ich stimme @MrFox zu. Nachdem ich dies getan habe, wird das Commit, das ich nicht möchte, immer noch im Baum angezeigt.
Timmmm

@Timmmm: Hilft die neue Erklärung?
Nightlyop

Eigentlich wurde mir klar, dass ich mein Engagement für Github bereits vorangetrieben hatte. Ich habe einen Artikel gefunden, in dem erklärt wird, wie man "Geschichte neu schreibt", aber es scheint, als sei es mehr Ärger als es wert ist!
Timmmm

46

Wenn Sie den Protokolleintrag auswählen, zu dem Sie zurückkehren möchten, können Sie auf "Auf dieses Commit zurücksetzen" klicken. Verwenden Sie diese Option nur, wenn Sie die Änderungen für das umgekehrte Festschreiben nicht vorgenommen haben. Wenn Sie befürchten, die Änderungen zu verlieren, können Sie den Soft-Modus verwenden, der eine Reihe nicht festgeschriebener Änderungen hinterlässt (was Sie gerade geändert haben). Wenn Sie die gemischte Version verwenden, wird die Arbeitskopie zurückgesetzt, diese Änderungen bleiben jedoch erhalten, und ein Hard wird die Änderungen nur vollständig entfernen. Hier sind einige Screenshots:

Geben Sie hier die Bildbeschreibung ein


3
Wenn Sie immer noch ein Symbol sehen, das anzeigt, dass ein Push von Ihrem vorherigen Commit verfügbar ist (das Sie gerade gelöscht haben), ziehen Sie und Sourcetree scheint die Benutzeroberfläche zu aktualisieren.
ChristoKiwi

6

Wenn Sie ein Commit löschen möchten, können Sie dies als Teil einer interaktiven Rebase tun. Aber seien Sie vorsichtig, damit Sie Ihr Repo nicht durcheinander bringen.

In Sourcetree:

  1. Klicken Sie mit der rechten Maustaste auf ein Commit, das älter ist als das, das Sie löschen möchten, und wählen Sie " Kinder von xxxx interaktiv neu starten ... ". Derjenige, auf den Sie klicken, ist Ihre "Basis" und Sie können Änderungen an jedem Commit vornehmen, der danach ausgeführt wird.
  2. Wählen Sie im neuen Fenster das Commit aus, das Sie entfernen möchten, und klicken Sie unten auf die Schaltfläche " Löschen " oder klicken Sie mit der rechten Maustaste auf das Commit und klicken Sie auf " Commit löschen ".
  3. Klicken Sie auf " OK " (oder auf " Abbrechen ", wenn Sie den Vorgang abbrechen möchten).

In diesem Atlassian-Blogbeitrag erfahren Sie mehr über interaktives Rebasing in Sourcetree.


Dies ist die Antwort, nach der ich gesucht habe und die genau nach Bedarf funktioniert hat.
Cliff Burton

0

Wenn Sie sich in einem anderen Zweig befinden, müssen Sie zuerst "auf dieses Commit prüfen", um ein Commit zu erhalten, das Sie löschen möchten. Erst dann funktioniert "Zurücksetzen des aktuellen Zweigs auf dieses Commit", wenn Sie das vorherige Wright-Commit auswählen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.