Wenn Sie mit anderen Personen im selben Code-Repository arbeiten, sollten Sie zunächst kein Commit löschen, da beim Erzwingen der Aktualisierung des Repositorys die lokalen Repositorys Ihrer Mitarbeiter in einem illegalen Zustand bleiben (z. B. wenn diese) Nach dem gelöschten Commit sind diese Commits ungültig, da sie auf einem jetzt nicht vorhandenen Commit basieren.
Sagte , dass, tun , was Sie können , ist revert die begehen. Dieser Vorgang wird je nach verwendetem CVS unterschiedlich ausgeführt (unterschiedliche Befehle):
Auf git :
git revert <commit>
Auf Quecksilber :
hg backout <REV>
BEARBEITEN:
Der Wiederherstellungsvorgang erstellt ein neues Commit, das das Gegenteil des zurückgesetzten Commits bewirkt (z. B. wenn das ursprüngliche Commit eine Zeile hinzugefügt hat, löscht das Zurücksetzungs-Commit diese Zeile), wodurch die Änderungen des unerwünschten Commits effektiv entfernt werden, ohne den Repository-Verlauf neu zu schreiben.
git backout <REV>
? Oder :hg backout <REV>
?Wenn Sie nicht mit anderen zusammenarbeiten (oder diese gerne erheblich stören) , können Sie Commits aus Bitbucket-Zweigen entfernen.
Wenn Sie versuchen, einen Nicht-Master-Zweig zu ändern:
Wenn Sie versuchen, den Hauptzweig zu ändern
Im Allgemeinen ist der Hauptzweig nichts Besonderes - es ist nur eine Konvention. Für Bitbucket und Github und ähnliche Sites muss jedoch normalerweise ein Hauptzweig vorhanden sein (vermutlich, weil es einfacher ist, mehr Code zu schreiben, als das Ereignis zu behandeln, dass ein Repository keine Zweige hat - nicht sicher). Sie müssen also einen neuen Zweig erstellen und diesen zum Hauptzweig machen:
Gehen Sie in Bitbucket zu den Repository-Einstellungen und ändern Sie den "Hauptzweig" in
master_temp
(ändern Sie in Github den "Standardzweig").Gehen Sie jetzt zu Bitbucket, und Sie sollten den gewünschten Verlauf sehen. Sie können jetzt zur Einstellungsseite gehen und den Hauptzweig wieder auf ändern
master
.Dieser Prozess funktioniert auch mit anderen Verlaufsänderungen (z
git filter-branch
. B. ). Sie müssen nur sicherstellen, dass die entsprechenden Commits zurückgesetzt werden, bevor der neue Verlauf vom alten getrennt wird.edit : anscheinend musst du dich nicht um all diesen Ärger mit Github kümmern, da du einen Reset-Zweig erzwingen kannst .
Umgang mit verärgerten Mitarbeitern
Wenn das nächste Mal jemand versucht, aus Ihrem Repository zu ziehen (wenn er bereits das fehlerhafte Commit gezogen hat), schlägt das Ziehen fehl. Sie müssen vor dem geänderten Verlauf manuell auf ein Commit zurückgesetzt und dann erneut gezogen werden.
Wenn sie das fehlerhafte Commit gezogen und zusätzlich festgeschrieben haben, müssen sie zurückgesetzt werden und dann
git cherry-pick
die guten Commits, die sie erstellen möchten, um den gesamten Zweig ohne das schlechte Commit effektiv neu zu erstellen.Wenn sie das schlechte Commit nie ausgeführt haben, wirkt sich dieser gesamte Prozess nicht auf sie aus, und sie können wie gewohnt ziehen.
quelle
Sie können zurücksetzen, um
HEAD^
dann das Drücken zu erzwingen.Es löscht Ihr letztes Commit und zeigt Bitbucket als gelöschtes Commit an, bleibt aber weiterhin auf dem Server.
quelle
Ich hatte in der Vergangenheit Probleme mit der Wiederherstellung von Git (hauptsächlich, weil ich nicht ganz sicher bin, wie es funktioniert). Ich hatte Probleme beim Zurücksetzen aufgrund von Zusammenführungsproblemen.
Meine einfache Lösung ist dies.
Schritt 1.
Ihr Projekt in einem anderen Ordner, dann:
Schritt 2.
dann Schritt 3.
Fügen Sie in Ihrem neuesten (und Haupt-) Projektverzeichnis (dem Verzeichnis mit dem problematischen letzten Commit) die Dateien von Schritt 2 ein
Schritt 4.
Schritt 5.
Genießen
quelle
git revert
ist einfach: Es wird ein neues Commit erstellt, das die Änderungen in einem vorherigen Commit (oder mehreren Commits) umkehrt. Commits werden nicht gelöscht, daher ist sie für diese Frage nicht relevant. Auch der Klonschritt hier ist nicht wirklich notwendig.Hier ist ein einfacher Ansatz in bis zu 4 Schritten:
0 - Teilen Sie dem Team mit, dass Sie das Repository reparieren möchten
Verbinden Sie sich mit dem Team und informieren Sie es über die bevorstehenden Änderungen.
1 - Entfernen Sie das letzte Commit
Angenommen, Ihr Zielzweig lautet
master
:An diesem Punkt sind Sie fertig, wenn Sie alleine arbeiten.
2 - Korrigieren Sie die lokalen Repositorys Ihres Teamkollegen
Auf Ihrem Teamkollegen:
Wenn Ihr Teamkollege keine neuen Commits hatte, sind Sie an diesem Punkt fertig und sollten synchron sein.
3 - Verlorene Commits zurückbringen
Angenommen, ein Teamkollege hatte ein neues und unveröffentlichtes Commit, das dabei verloren ging.
Tun Sie dies für so viele Commits wie nötig.
Ich habe diesen Ansatz viele Male erfolgreich angewendet. Es erfordert Teamarbeit, um sicherzustellen, dass alles synchronisiert ist.
quelle
Wie andere gesagt haben, möchten Sie normalerweise
hg backout
oder verwendengit revert
. Manchmal möchten Sie jedoch ein Commit wirklich loswerden.Zunächst möchten Sie zu den Einstellungen Ihres Repositorys gehen. Klicken Sie auf den
Strip commits
Link.Geben Sie die Änderungssatz-ID für den Änderungssatz ein, den Sie zerstören möchten, und klicken Sie auf
Preview strip
. So können Sie sehen, welche Art von Schaden Sie anrichten werden, bevor Sie es tun. Dann klickenConfirm
Sie einfach und Ihr Commit ist nicht mehr Geschichte. Stellen Sie sicher, dass Sie allen Ihren Mitarbeitern mitteilen, was Sie getan haben, damit sie das beleidigende Commit nicht versehentlich zurückschieben.quelle
Sobald Änderungen festgeschrieben wurden, können sie nicht mehr gelöscht werden. weil die grundlegende Natur des Commits darin besteht, nicht zu löschen.
Was Sie tun können (einfache und sichere Methode),
Interaktiver Rebase:
1)
git rebase -i HEAD~2
# zeigt Ihre letzten 2 Commits an2) Ihr Commit wird wie folgt aufgelistet: Zuletzt wird am Ende der Seite LILO angezeigt (last in Last Out).
Löschen Sie die letzte Festschreibungszeile vollständig
3) Speichern Sie es durch
ctrl+X
oderESC:wq
Jetzt wird Ihre Filiale ohne Ihr letztes Commit aktualisiert.
quelle
Sie können den Befehl auch für Bitbucket schreiben, wie von Dustin erwähnt :
So entfernen Sie das letzte Commit lokal in Git:
quelle
Inzwischen ermöglicht Cloud-Bitbucket (ich bin nicht sicher, welche Version) das Zurücksetzen eines Commits aus dem Dateisystem wie folgt (ich sehe nicht, wie das Zurücksetzen von der Bitbucket-Oberfläche im Chrome-Browser erfolgt).
- Sichern Sie Ihr gesamtes Verzeichnis, um die Änderungen zu sichern, die Sie versehentlich festgeschrieben haben
-Wählen Sie das ausgecheckte Verzeichnis aus
-Rechte Maustaste: Schildkröten-Git-Menü
-repo-browser (die Menüoption 'Zurücksetzen' macht nur die nicht festgeschriebenen Änderungen rückgängig)
-Drücken Sie die HEAD-Taste
-Wählen Sie die oberste Zeile (das letzte Commit)
-rechte Maustaste: Änderung durch dieses Commit rückgängig machen
-Nachdem die Änderungen im Dateisystem rückgängig gemacht wurden, drücken Sie Commit
-dies aktualisiert GIT mit der Meldung 'Zurücksetzen (Ihre vorherige Nachricht). Dies kehrt Commit so und so zurück '
-Wählen Sie "Commit and Push".
quelle