it-swarm.com.de

Lösche den letzten Commit in Bitbucket

Ich habe einen Fehler gemacht und weiß nicht, wie ich meinen neuesten Push im Repository löschen soll. Ich ziehe die neuesten Updates der App, aber es gibt Konflikte und ich schiebe sie in das Repository. 

Wie lösche ich mein letztes Commit? Oder wie kann ich das beheben?

94
catherine

Erstens sollten Sie, wenn Sie mit anderen Personen am selben Code-Repository arbeiten , ein Commit nicht löschen , da Sie die Aktualisierung auf dem erzwingen repository es wird die lokalen Repositories Ihrer Mitarbeiter in einem illegalen Zustand belassen (wenn sie z. B. Commits nach dem von Ihnen gelöschten durchgeführt haben, sind diese Commits ungültig, da sie auf einem jetzt nicht existierenden Commit basierten).

Gesagt, was Sie tun können, ist das Festschreiben rückgängig zu machen . Dieser Vorgang wird je nach verwendetem CVS unterschiedlich ausgeführt (verschiedene Befehle):

On git :

git revert <commit>

Ein Mercurial :

hg backout <REV>

EDIT: Die Zurücksetzungsoperation erstellt eine neue Festschreibung, die das Gegenteil der zurückgesetzten Festschreibung bewirkt (z. B. wenn die ursprüngliche Festschreibung eine Zeile hinzugefügt hat, wird diese durch die Zurücksetzungsfestschreibung gelöscht Entfernen der Änderungen des unerwünschten Commits, ohne den Repository-Verlauf neu zu schreiben.

93
asermax

Wenn Sie nicht mit anderen zusammenarbeiten (oder froh sind, dass sie erheblichen Ärger verursachen), können Sie Commits aus Bitbucket-Zweigen entfernen.

Wenn Sie versuchen, einen Nicht-Master-Zweig zu ändern:

git reset HEAD^               # remove the last commit from the branch history
git Push Origin :branch_name  # delete the branch from bitbucket
git Push Origin branch_name   # Push the branch back up again, without the last commit

wenn Sie versuchen, den Hauptzweig zu ändern

Im Allgemeinen ist der Master-Zweig nicht speziell - es ist nur eine Konvention. Für bitbucket und github und ähnliche Sites ist jedoch normalerweise ein Hauptzweig erforderlich (vermutlich weil es einfacher ist, mehr Code zu schreiben, um mit dem Ereignis umzugehen, dass ein Repository keine Zweige hat - nicht sicher). Sie müssen also einen neuen Zweig erstellen und diesen zum Hauptzweig machen:

# on master:
git checkout -b master_temp  
git reset HEAD^              # undo the bad commit on master_temp
git Push Origin master_temp  # Push the new master to Bitbucket

Wechseln Sie in Bitbucket zu den Repository-Einstellungen und ändern Sie den "Hauptzweig" in master_temp (ändern Sie in Github den "Standardzweig").

git Push Origin :master     # delete the original master branch from Bitbucket
git checkout master
git reset master_temp       # reset master to master_temp (removing the bad commit)
git Push Origin master      # re-upload master to bitbucket

Gehen Sie jetzt zu Bitbucket, und Sie sollten den gewünschten Verlauf sehen. Sie können jetzt auf die Einstellungsseite gehen und den Hauptzweig wieder in master ändern.

Dieser Prozess funktioniert auch mit allen anderen Verlaufsänderungen (z. B. git filter-branch). Sie müssen lediglich sicherstellen, dass Sie auf die entsprechenden Commits zurückgesetzt werden, bevor die neue Historie von der alten getrennt wird. 

edit: Anscheinend musst du nicht auf github all diesen Ärger machen, da du force-Push einen Reset-Zweig drücken kannst .

Umgang mit verärgerten Mitarbeitern

Das nächste Mal, wenn jemand versucht, aus Ihrem Repository zu ziehen (wenn er das schlechte Commit bereits ausgeführt hat), schlägt der Pull fehl. Sie müssen vor dem geänderten Verlauf manuell auf ein Commit zurücksetzen und dann erneut ziehen.

git reset HEAD^
git pull

Wenn sie das schlechte Commit, und darüber hinaus, gezogen haben, müssen sie sich zurücksetzen, und dann git cherry-pick die guten Commits, die sie erstellen möchten, wodurch der gesamte Zweig effektiv ohne das schlechte erstellt wird verpflichten.

Wenn sie niemals das schlechte Commit ausgeführt haben, wird der gesamte Prozess sie nicht beeinflussen und sie können wie gewohnt ziehen.

89
naught101

sie können auf HEAD^ zurücksetzen und dann Push erzwingen.

git reset HEAD^
git Push -u Origin master --force

Ihr letzter Commit wird gelöscht, und Bitbucket wird als Commit gelöscht angezeigt, verbleibt jedoch auf dem Server.

37
Shubanker

Ich habe in der Vergangenheit Probleme mit Git Revert gehabt (hauptsächlich, weil ich nicht ganz sicher bin, wie es funktioniert.) Ich hatte Probleme mit dem Zurückkehren wegen Merge-Problemen.

Meine einfache Lösung ist dies.

Schritt 1.

 git clone <your repos URL> .

ihr Projekt in einem anderen Ordner, dann:

Schritt 2.

git reset --hard <the commit you wanna go to>

dann Schritt 3.

fügen Sie die Dateien in Schritt 2 in Ihr aktuelles (und Haupt-) Projektverzeichnis ein (dasjenige, bei dem der letzte Commit problematisch ist)

Schritt 4. 

git commit -m "Fixing the previous messy commit" 

Schritt 5 

Genießen

3
SudoPlz

Wie andere gesagt haben, möchten Sie normalerweise hg backout oder git revert verwenden. Manchmal möchten Sie jedoch ein Commit wirklich loswerden.

Zunächst möchten Sie zu den Einstellungen Ihres Repositorys gehen. Klicken Sie auf den Link Strip commits.

 Strip commits link in bitbucket settings 

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 gleich anrichten werden, bevor Sie ihn anrichten. Dann klicken Sie einfach auf Confirm und Ihr Commit ist nicht mehr vergangen. Vergewissern Sie sich, dass Sie allen Ihren Mitarbeitern mitteilen, was Sie getan haben, damit diese nicht versehentlich das beleidigende Commit zurückschieben.

0
nmichaels

Sobald die Änderungen übernommen wurden, können sie nicht mehr gelöscht werden. denn der grundlegende Charakter von commit ist nicht zu löschen.

Was Sie tun können (einfache und sichere Methode),

Interactive Rebase:

1) git rebase -i HEAD~2 #wird Ihre letzten 2 Commits anzeigen

2) Ihr Commit wird wie "Letzte" am Ende der Seite LILO (last in Last Out) angezeigt.

 enter image description here

Löschen Sie die letzte Commit-Zeile vollständig

3) speichern Sie es mit ctrl+X oder ESC:wq 

jetzt wird Ihre Niederlassung ohne Ihr letztes Commit aktualisiert.

Derzeit ermöglicht Cloud-Bitbucket (ich bin nicht sicher, welche Version) das Zurücksetzen eines Commits aus dem Dateisystem wie folgt (ich verstehe nicht, wie das Zurücksetzen von der Bitbucket-Oberfläche im Browser Chrome erfolgt).

- Sichern Sie Ihr gesamtes Verzeichnis, um die Änderungen zu sichern, die Sie versehentlich vorgenommen haben

-ausgechecktes Verzeichnis auswählen

- Rechte Maustaste: Tortoise Git-Menü

-repo-browser (der Menüpunkt 'Zurücksetzen' macht nur die nicht festgeschriebenen Änderungen rückgängig)

-Drücken Sie die Taste HEAD

-Wählen Sie die oberste Zeile (das letzte Commit)

- Rechte Maustaste: Änderung durch diesen Commit rückgängig machen

-Nachdem Sie die Änderungen im Dateisystem rückgängig gemacht haben, drücken Sie Festschreiben

-dies aktualisiert GIT mit der Nachricht 'Zurücksetzen (Ihre vorherige Nachricht). Das macht wieder so und so '

-Wählen Sie "Commit and Push".

0
smriti

Sie können den Befehl auch für Bitbucket schreiben, wie von Dustin erwähnt:

git Push -f Origin HEAD^:master

Hinweis: Anstelle von master können Sie auch einen beliebigen Zweig verwenden. Und es löscht einfach Push on Bitbucket.

Zum Entfernen des letzten Commits lokal in git verwenden Sie:

git reset --hard HEAD~1
0
invzbl3