Löschen Commits von einem Zweig in Git

stimmen
2k

Ich würde gerne wissen, wie ein Commit zu löschen.

Durch deletemeine ich , es ist , als ob ich nicht, dass begehen, und wenn ich einen Stoß in der Zukunft tun, werden meine Änderungen nicht an den Remote - Zweig schieben.

Ich lese git Hilfe, und ich denke , der Befehl , den ich verwenden soll , ist git reset --hard HEAD. Ist das richtig?

Veröffentlicht am 27/08/2009 um 04:39
quelle vom benutzer
In anderen Sprachen...                            


29 antworten

stimmen
3k

Achtung: git reset --hard IHRE ARBEITS Directory - Änderungen DELETE . Achten Sie darauf, alle lokalen Änderungen bunkern Sie behalten möchten , bevor Sie diesen Befehl ausführen.

Angenommen, Sie auf, dass begehen sitzen, dann wird dieser Befehl es wack ...

git reset --hard HEAD~1

Die HEAD~1Mittel der Commit vor Kopf.

Oder könnten Sie am Ausgang suchen git log, finden die Commit - ID des begehen Sie, die gesichert werden sollen und dann wie folgt vorgehen:

git reset --hard <sha1-commit-id>

Wenn Sie bereits gedrückt haben, müssen Sie eine Kraft Push tun, es loszuwerden ...

git push origin HEAD --force

Aber wenn andere haben es, ziehen können, dann würden Sie besser dran , beginnend eine Niederlassung sein. Denn wenn sie ziehen, wird es verschmelzen sie nur in ihre Arbeit, und Sie werden es wieder erhalten zurückgeschoben.

Wenn Sie bereits gedrückt wird , kann es besser sein zu verwenden git revert, ein „Spiegelbild“ zu erstellen , dass begehen die Änderungen rückgängig machen. Allerdings werden beiden Commits im Protokoll sein.


FYI - git reset --hard HEADist groß , wenn Sie loswerden WORK IN PROGRESS erhalten möchten. Es wird Sie zurück auf die jüngsten zurückgesetzt begehen, und löschen Sie alle Änderungen in Ihrem Arbeits Baum und Index.


Schließlich, wenn Sie zu finden , benötigen eine Festschreibung , dass Sie „gelöscht“, es typischerweise in ist , git reflogwenn Sie Müll Repository gesammelt haben.

Beantwortet am 27/08/2009 um 04:44
quelle vom benutzer

stimmen
588

Wenn Sie noch nicht haben geschoben überall die Commit, können Sie git rebase -izu entfernen , dass begehen. Zuerst ist herauszufinden , wie weit zurück , die zu begehen ist (ungefähr). Dann mach:

git rebase -i HEAD~N

Die ~NMittel rebase die letzten NCommits ( Nmuss eine Zahl sein , zum Beispiel HEAD~10). Dann können Sie die Datei bearbeiten , die Git präsentiert Ihnen die säumige löschen begehen. Auf diese Datei speichern, wird Git dann neu schreiben alle folgenden Commits als das von Ihnen nicht existierte gelöscht.

Das Git Buch hat einen guten Abschnitt über Rebasing mit Bildern und Beispielen.

Seien Sie vorsichtig mit dieser aber, weil , wenn Sie etwas ändern , die Sie haben an anderer Stelle gedrückt wird , wird ein anderer Ansatz erforderlich werden , wenn eine Kraft Push planen zu tun.

Beantwortet am 27/08/2009 um 04:51
quelle vom benutzer

stimmen
406

Eine andere Möglichkeit ist einer meiner persönlichen Lieblings Befehle:

git rebase -i <commit>~1

Dies wird das Fütterungsmaterial im interaktiven Modus startet -ian dem Punkt kurz vor dem begehen Sie whack wollen. Der Editor wird gestartet alle Commits seitdem auflistet. Löschen Sie die Zeile mit dem Commit Sie auszulöschen und die Datei zu speichern. Rebase den Rest der Arbeit tun, nur löschen , die zu begehen, und all die anderen zurück in die Log - Wiedergabe.

Beantwortet am 27/08/2009 um 04:49
quelle vom benutzer

stimmen
276

Ich anhängen diese Antwort, weil ich sehe nicht, warum jemand, der gerade versucht hat, Arbeit zu begehen würde wollen, dass alle Arbeiten zu löschen, weil einige Fehler mit Git!

Wenn Sie Ihre Arbeit behalten wollen und nur ‚rückgängig machen‘, den Befehl commit (Sie vor schieben zum Repo gefangen):

git reset --soft HEAD~1

Sie nicht die --hard verwenden Flagge , wenn Sie Ihre Arbeit in Fortschritt seit dem letzten zerstören wollen begehen.

Beantwortet am 15/10/2012 um 19:17
quelle vom benutzer

stimmen
46

Wenn Sie keine Änderungen veröffentlichen haben, zu entfernen neuesten begehen, können Sie tun

$ git reset --hard HEAD^

(Beachten Sie, dass dies auch alle unbestätigten Änderungen entfernen, verwenden Sie vorsichtig).

Wenn Sie bereits veröffentlichten-Lösch begehen, verwenden git revert

$ git revert HEAD
Beantwortet am 27/08/2009 um 11:47
quelle vom benutzer

stimmen
40

eine ganze Entfernen verpflichten

git rebase -p --onto SHA^ SHA

Offensichtlich ersetzen „SHA“ mit der Referenz Sie wollen, sich wieder loszuwerden. Das „^“ in diesem Befehl ist Literal.

http://sethrobertson.github.io/GitFixUm/fixup.html

Beantwortet am 31/08/2015 um 19:36
quelle vom benutzer

stimmen
31
git reset --hard commitId

git push <origin> <branch> --force

PS: CommitId bezieht sich die eine, die Sie wieder zurückkehren wollen

Beantwortet am 16/10/2014 um 10:51
quelle vom benutzer

stimmen
29

Wenn Sie reparieren wollen, um Ihre neuesten begehen, können Sie rückgängig machen, die begehen, und unstage die Dateien darin, indem Sie:

git reset HEAD~1

Dadurch wird Ihr Repository in den Zustand zurück, bevor die git Befehle hinzufügen, die die Dateien in Szene gesetzt. Ihre Änderungen werden in Ihrem Arbeitsverzeichnis sein. HEAD ~ 1 bezieht sich auf die unter der aktuellen Spitze des Zweiges begehen.

Wenn Sie wollen uncommit N verpflichtet, aber die Code-Änderungen in Ihrem Arbeitsverzeichnis halten:

git reset HEAD~N

Wenn Sie Ihre neuesten loswerden wollen begehen, und wollen nicht die Code-Änderungen zu halten, können Sie eine „harte“ Reset tun.

git reset --hard HEAD~1

Ebenso, wenn Sie die letzte N verpflichtet verwerfen wollen, und wollen nicht die Code-Änderungen behalten:

git reset --hard HEAD~N
Beantwortet am 31/05/2014 um 08:19
quelle vom benutzer

stimmen
19

Gewaltsam Änderungsverlauf

Angenommen, Sie wollen nicht nur die letzten Commit löschen, aber Sie bestimmte Commits der letzten n löschen Commits, gehen Sie mit:

git rebase -i HEAD~<number of commits to go back>, So , git rebase -i HEAD~5wenn Sie die letzten fünf Commits sehen wollen.

Dann im Texteditor das Wort ändern , pickum dropneben jeder begehen würden Sie entfernen möchten. Speichern und beenden Sie den Editor. Voila!

Additiv Änderungsverlauf

Versuchen git revert <commit hash>. Revert schaffen wird eine neue verpflichten , dass die Commit angegeben rückgängig macht.

Beantwortet am 15/06/2017 um 23:01
quelle vom benutzer

stimmen
15

Sagen wir Commits 2 & 4 aus dem Repo entfernen möchten.

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

Hinweis: Sie müssen über die Repo - Admin - Rechte haben , da Sie verwenden --hardund -f.

  • git checkout b3d92c5 Kasse die letzten nutzbar begehen.
  • git checkout -b repair Erstellen Sie einen neuen Zweig zu arbeiten.
  • git cherry-pick 77b9b82 Führen Sie durch 3 begehen.
  • git cherry-pick 2c6a45b Führen Sie durch 1 verpflichten.
  • git checkout master Kasse Master.
  • git reset --hard b3d92c5 Zurücksetzen Master zum letzten nutzbaren begehen.
  • git merge repair Zusammenführen unserer neuen Niederlassung auf Master.
  • git push -f origin master Push-Master an die Remote-Repo.
Beantwortet am 05/09/2017 um 07:19
quelle vom benutzer

stimmen
14
git rebase -i HEAD~2

Hier ‚2‘ ist die Zahl der Commits Sie rebase wollen.

'git rebase -i HEAD`

wenn Sie wollen, dass alle Commits rebase.

Dann werden Sie in der Lage sein, eine dieser Optionen zu wählen.

p, pick = use commit

r, reword = use commit, but edit the commit message

e, edit = use commit, but stop for amending

s, squash = use commit, but meld into previous commit

f, fixup = like "squash", but discard this commit's log message

x, exec = run command (the rest of the line) using shell

d, drop = remove commit

Diese Linien können nachbestellt werden; sie werden von oben nach unten ausgeführt. Wenn Sie eine Linie hier entfernen das wird LOST COMMIT. Wenn Sie jedoch alles entfernen, wird das Fütterungsmaterial abgebrochen werden. Beachten Sie, dass leere Commits aus sind kommentiert

Sie können einfach entfernen, die Option „d“ commit verwenden oder eine Zeile entfernen, die Ihre begehen hat.

Beantwortet am 18/05/2016 um 23:39
quelle vom benutzer

stimmen
11

Um in der lokalen Niederlassung zu löschen, verwenden

git reset --hard HEAD~1

Um in einem entfernten Zweig zu löschen, verwenden

git push origin HEAD --force
Beantwortet am 28/08/2014 um 17:06
quelle vom benutzer

stimmen
7

Der Fehler:

I git rebase -i --root‚ed meine Zweig, unwissend dachte , ich könnte die erste umformulieren begehen aus dem Master unterscheiden (die GitHub for Windows - Standardansicht ist der Vergleich zu meistern, versteckt seiner Gesamtheit).

Ich wuchs ein Silicon Valley Bart während 900+ Commits sich in Sublime geladen. Beenden ohne Änderungen, aufgeladen ich meine Batterie dann rasieren weitergegangen, als alle 900+ einzelne nonchalant umbasiert Commits - Zurücksetzen ihrer Zeit verpflichten, jetzt.

Entschlossen Git zu schlagen und die ursprünglichen Zeiten zu bewahren, löschte ich diese lokalen Repository und von der Remote-Wieder geklont.

Nun war es wieder hinzugefügt eine letzte zu meistern unnötige begehen wollte ich so entfernen, wie so fort.

Anstrengend die Optionen:

Ich wollte nicht git revert- es wäre schaffen eine zusätzliche begehen, was Git die Oberhand.

git reset --hard HEADtat nichts, nachdem die Überprüfung reflog, die letzte und einzige HEADwar der Klon - Git gewinnt.

Um die neuesten SHA zu erhalten, überprüfte ich die Remote-Repository auf github.com - Moll-Sieg.

Nachdem ich git reset --hard <SHA>gearbeitet hatte, habe ich einen anderen Zweig aktualisiert zu meistern und 1 ... 2 ... puh! die Festschreibung war zurück - Git gewinnt.

Überprüfen wieder heraus zu meistern, Zeit , um zu versuchen git rebase -i <SHA>, dann entfernen Sie die Zeile ... ohne Erfolg, traurig zu sagen. „ Wenn Sie eine Linie hier entfernen das wird COMMIT LOST “. Ah ... beschönigt neues Feature Troll die n00b in den 2.8.3 Release Notes .

Die Lösung:

git rebase -i <SHA>dann d, drop = remove commit.

Um zu überprüfen, überprüfte ich zu einem anderen Zweig aus, und voila - kein Versteck begeht vom Master zu holen / ziehen.

https://twitter.com/holman/status/706006896273063936

Guten Tag Ihnen.

Beantwortet am 25/05/2016 um 20:33
quelle vom benutzer

stimmen
7

Hier ist eine andere Art und Weise, dies zu tun:

Kasse die Filiale Sie zurücksetzen wollen, dann setzen Sie Ihre lokale Arbeitskopie zurück zu dem Commit, dass Sie das späteste auf dem Remote-Server sein sollen (alles danach geht bye-bye wird). Um dies zu tun, in SourceTree ich rechts geklickt hat auf die und ausgewählte „Reset branch auf diese begehen“. Ich denke, dass die Befehlszeile:

git reset --hard COMMIT_ID

Da Sie gerade Ihre Branche aus der Ferne ausgecheckt, Sie gehen keine lokalen Änderungen haben zu verlieren, sich Sorgen zu machen. Aber das würde sie verlieren, wenn Sie getan haben.

Navigieren Sie dann zu Ihrem lokalen Verzeichnis des Repositorys und führen Sie diesen Befehl:

git -c diff.mnemonicprefix=false -c core.quotepath=false \
push -v -f --tags REPOSITORY_NAME BRANCHNAME:BRANCHNAME

Dadurch werden alle Commits nach der aktuellen in Ihrem lokalen Repository löschen, sondern nur für diesen einen Zweig.

Beantwortet am 13/05/2013 um 18:20
quelle vom benutzer

stimmen
7

Alle Befehle oben wiederherstellen den Zustand Ihrer Arbeit Baum und Index, wie sie waren, bevor der Commit zu machen, aber nicht wieder her den Zustand des Repository. Wenn man es betrachtet, wird die „entfernt“ begehen nicht wirklich entfernt, ist es einfach nicht der auf der Spitze des aktuellen Zweiges.

Ich denke , dass es keine Mittel ein mit Commit entfernen Porzellan Befehlen . Der einzige Weg ist es aus dem Protokoll zu entfernen und reflog und dann auszuführen git prune --expire -now.

Beantwortet am 04/10/2012 um 08:19
quelle vom benutzer

stimmen
5

Wenn Sie die Geschichte halten wollen, die begehen und die revert zeigt, sollten Sie verwenden:

git revert GIT_COMMIT_HASH

geben Sie die Nachricht zu erklären, warum sind Sie zurückkehrt und dann:

git push  

Wenn Sie Ausgabe git logsehen Sie sowohl die „falschen“ begehen und Log - Meldungen zurück.

Beantwortet am 07/01/2015 um 15:13
quelle vom benutzer

stimmen
5

Wenn Sie nur Ihre letzte Commit verkorkste (falsche Botschaft, vergaß einige Änderungen hinzufügen) und will es zu beheben, bevor es zu einem öffentlichen Repo drängt, warum nicht verwenden:

git commit --amend -m "New message here"

Wenn Sie neu Änderungen inszeniert sie werden mit dem letzten Commit zusammengefasst werden (dass Sie versuchen, sie wieder loszuwerden) und ersetzen wird, dass begehen.

Natürlich, wenn Sie ein Commit ändern, nachdem Sie es gedrückt haben, sind Umschreiben Sie Geschichte also, wenn Sie, dass die Auswirkungen zu verstehen seien sicher.

Sie können auch die ‚--no-edit‘ Option anstelle von ‚-m‘ übergeben, wenn Sie die vorherige begehen die Nachricht zu verwenden, würde es vorziehen.

Docs: http://git-scm.com/docs/git-commit.html

Beantwortet am 27/05/2014 um 00:24
quelle vom benutzer

stimmen
3

Quelle: https://gist.github.com/sagarjethi/c07723b2f4fa74ad8bdf229166cf79d8

Löschen der letzten Commit

Zum Beispiel Ihre letzten Commit

git push origin aa61ab32 ^: master

Jetzt wollen Sie diese verpflichten löschen dann eine einfache Möglichkeit, dies folgendes zu tun

Schritte

  1. Zuerst setzen Sie den Zweig an die Eltern des aktuellen begehen

  2. Kraft schieben Sie es auf die Fernbedienung.

git reset HEAD^ --hard

git push origin -f

Für bestimmte verpflichten, möchten Sie zurückgestellt wird folgende

git reset bb676878^ --hard

git push origin -f
Beantwortet am 22/06/2018 um 13:40
quelle vom benutzer

stimmen
2

Was ich tue, in der Regel, wenn ich begehen und Push (wenn jemand schob seinen begehen dies das Problem lösen):

git reset --hard HEAD~1

git push -f origin

Ich hoffe das hilft

Beantwortet am 14/06/2017 um 09:22
quelle vom benutzer

stimmen
1

Wenn Sie bereits gedrückt haben, zuerst finden die verpflichten Sie bei HEAD sein wollen ($ GIT_COMMIT_HASH_HERE) , dann führen Sie den folgenden:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force

Dann wird jeder Ort, der Repo geklont wurde, führen:

git reset --hard origin/master
Beantwortet am 30/01/2017 um 00:25
quelle vom benutzer

stimmen
0
// display git commit log    
$ git log --pretty=oneline --abbrev-commit

// show last two commit and open in your default editor
// then delete second commit line and save it
$ git rebase -i HEAD~2

Referenz: Wie ein Commit in git, lokal löschen und Fern

Beantwortet am 26/06/2019 um 15:46
quelle vom benutzer

stimmen
0

Ich habe bereits gedrückt. Brauchen Sie einige Commits zurück remotly zurückzukehren. Haben viele Variationen ausprobiert, aber nur das von Justin via git Busch arbeitet gut für mich:

git reset --hard $GIT_COMMIT_HASH_HERE
git push origin HEAD --force
Beantwortet am 08/02/2019 um 21:29
quelle vom benutzer

stimmen
0

delete lokalen begehen

Wie Sie auf dem oberen Bild sehen können , ich will revert „2 Test Wechsel“ löschen commit (SHA1 - ID: 015b5220c50e3dfbb1063f23789d92ae1d3481a2 (Sie SHA1 - ID unter Verwendung bekommen gitkBefehl in git bash)).

Dafür kann ich verwenden (. Alle unter Befehl Arbeit auf lokale nur müssen Sie nach dem Löschen drücken):

  1. git reset --hard 515b5220c50e3dfbb1063f23789d92ae1d3481a2// es Back-up Sie zu diesem begehen (SHA1 - ID des Test Änderung 4 begehen ist 515b5220c50e3dfbb1063f23789d92ae1d3481a2 )
  2. git reset --hard HEAD~1 // es Back-up Sie vor einer begehen.
  3. git reset --hard HEAD^ // So entfernen Sie das letzte von git commit

nach löschen:

nach löschen begehen

Beantwortet am 03/07/2018 um 06:51
quelle vom benutzer

stimmen
0

Zurücksetzen auf die lokale Niederlassung

git reset --hard HEAD~<Number of commit> So git reset --hard HEAD~3

Kraft Push-to-Ursprung

git push -f origin
Beantwortet am 29/05/2018 um 07:38
quelle vom benutzer

stimmen
0

git zurückkehren https://git-scm.com/docs/git-revert .Es wird der gesamte Code zurückkehren dann zum nächsten commit.Then Kopf begehen zu diesem letzten Punkt wird tun können. zurückgekehrt Commits löschen nie , aber es wird keinen Einfluss auf Sie das letzte Mal begehen.

Beantwortet am 01/03/2017 um 15:15
quelle vom benutzer

stimmen
0

git reset --hard

git push origin HEAD --force

Wenn eine oder mehrere der Commits markiert ist, löschen Sie den Tag (en) aus . Andernfalls verpflichten sich die getaggten nicht entfernt wird.

Beantwortet am 24/07/2015 um 14:45
quelle vom benutzer

stimmen
0

Vorausgesetzt, dass Sie nicht auf die Remote-Repository geschoben haben, können Sie das Repository erneut klonen. Dies hat ein paar Mal meine Methode der Wahl.

Beantwortet am 31/12/2014 um 06:54
quelle vom benutzer

Beantwortet am 18/07/2018 um 06:27
quelle vom benutzer

stimmen
-1

Nehmen Sicherung Ihres Code in temporären Ordner. Folgender Befehl zurückgesetzt gleich wie Server.

git reset --hard HEAD
git clean -f
git pull

Dann kopieren Sie die gewünschten Dateien allein aus Temp-Ordner, dann begehen

Beantwortet am 14/07/2016 um 11:25
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more