änderungen - git reset head




Wie mache ich die letzten Commits in Git rückgängig? (20)

Ich habe versehentlich die falschen Dateien an Git , aber ich habe das Commit noch nicht auf den Server verschoben.

Wie kann ich diese Commits aus dem lokalen Repository rückgängig machen?


Das letzte Commit ändern

Ersetzen Sie die Dateien im Index:

git rm --cached *.class
git add *.java

Wenn es sich um einen privaten Zweig handelt, ändern Sie das Commit:

git commit --amend

Wenn es sich um einen gemeinsam genutzten Zweig handelt, geben Sie ein neues Commit ein:

git commit -m 'Replace .class files with .java files'


( Um ein vorheriges Commit zu ändern , verwenden Sie die fantastische interaktive Basis )

ProTip ™: Fügen Sie *.class einem gitignore , um dies erneut zu verhindern.

Ein Commit zurücknehmen

Das Ändern eines Commits ist die ideale Lösung, wenn Sie das letzte Commit ändern müssen, eine allgemeinere Lösung jedoch reset .

Sie können git mit jedem Commit zurücksetzen:

git reset @~N

Dabei ist N die Anzahl der Commits vor HEAD und @~ setzt den vorherigen Commit zurück.

Anstatt das Festschreiben zu ändern, können Sie Folgendes verwenden:

git reset @~
git add *.java
git commit -m "Add .java files"

--soft Sie sich git help reset , insbesondere die Abschnitte zu --soft --mixed und --hard , um ein besseres Verständnis der Funktionsweise zu erhalten.

Reflog

Wenn Sie etwas vermasseln, können Sie das reflog immer verwenden, um abgelegte Commits zu finden:

$ git reset @~
$ git reflog
c4f708b [email protected]{0}: reset: moving to @~
2c52489 [email protected]{1}: commit: added some .class files
$ git reset 2c52489
... and you're back where you started



Letztes Commit rückgängig machen:

git reset --soft HEAD^ oder git reset --soft HEAD~

Dadurch wird das letzte Commit rückgängig gemacht.

Hier bedeutet --soft das Zurücksetzen in die Inszenierung.

HEAD~ oder HEAD^ bedeutet, sich vor dem HEAD zum Commit zu bewegen.

Letztes Commit für neues Commit ersetzen:

git commit --amend -m "message"

Es wird das letzte Commit durch das neue Commit ersetzen.


Rückgängig machen und wiederholen

$ git commit -m "Something terribly misguided"             # (1)
$ git reset HEAD~                                          # (2)
<< edit files as necessary >>                              # (3)
$ git add ...                                              # (4)
$ git commit -c ORIG_HEAD                                  # (5)
  1. Dies möchten Sie rückgängig machen
  2. Dadurch bleibt Ihr Arbeitsbaum (der Status Ihrer Dateien auf der Festplatte) unverändert, macht das Commit jedoch rückgängig und lässt die von Ihnen festgeschriebenen Änderungen nicht im Staging (dh sie werden im git status als "Nicht für das Commit bereitgestellte Änderungen" angezeigt, und Sie müssen dies tun fügen Sie sie erneut hinzu, bevor Sie ein Commit ausführen. Wenn Sie nur weitere Änderungen zum vorherigen Commit hinzufügen oder die Commit-Nachricht 1 ändern möchten, können Sie stattdessen git reset --soft HEAD~ verwenden. git reset --soft HEAD~ ist ähnlich wie bei git reset HEAD~ (wobei HEAD~ dem HEAD~1 ), aber Ihre bestehenden Änderungen werden in Szene gesetzt.
  3. Nehmen Sie Korrekturen an Arbeitsbaumdateien vor.
  4. git add alles git add was Sie in Ihr neues Commit aufnehmen möchten.
  5. Übernehmen Sie die Änderungen und verwenden Sie die alte Commit-Nachricht erneut. reset kopierte den alten Kopf nach .git/ORIG_HEAD ; commit mit -c ORIG_HEAD öffnet einen Editor, der zunächst die Protokollnachricht des alten Commits enthält und die Bearbeitung ermöglicht. Wenn Sie die Nachricht nicht bearbeiten müssen, können Sie die Option -C .

Wenn Sie jedoch neue Änderungen am Index hinzugefügt haben, werden sie mit commit --amend zu Ihrem vorherigen Commit hinzugefügt.

Wenn der Code bereits auf Ihren Server übertragen wurde und Sie die Berechtigung zum Überschreiben des Verlaufs (Rebase) haben, gilt Folgendes:

git push origin master --force

Sie können sich auch diese Antwort ansehen:

Wie verschiebe ich HEAD an einen vorherigen Ort? (Freistehender Kopf)

Die obige Antwort zeigt Ihnen git reflog , mit dem Sie herausfinden, zu welchem ​​SHA-1 Sie zurückkehren möchten. Sobald Sie den Punkt gefunden haben, an dem Sie rückgängig machen möchten, verwenden Sie die oben beschriebene Befehlsfolge.

1 Beachten Sie jedoch, dass Sie nicht auf ein früheres Commit zurücksetzen müssen, wenn Sie gerade einen Fehler in Ihrer Commit-Nachricht gemacht haben . Die einfachere Option ist git reset (um alle vorgenommenen Änderungen zu aktualisieren) und dann git commit --amend , wodurch Ihr Standard-Commit-Nachrichteneditor mit der letzten Commit-Nachricht vorbelegt wird.


"Zurücksetzen des Arbeitsbaums auf den letzten Commit"

git reset --hard HEAD^ 

"Bereinigen Sie unbekannte Dateien aus dem Arbeitsbaum"

git clean    

siehe - Git Quick Reference

HINWEIS: Dieser Befehl löscht Ihre vorherige Festschreibung, verwenden Sie also Vorsicht! git reset --hard ist sicherer -


Ein anderer Weg:

Überprüfen Sie den Zweig, den Sie wiederherstellen möchten, und setzen Sie dann Ihre lokale Arbeitskopie auf den Commit zurück, den Sie auf dem Remote-Server als letztes verwenden möchten (alles, was danach passiert, wird auf Wiedersehen gehen). Dazu habe ich in SourceTree mit der rechten Maustaste auf das geklickt und "BRANCHNAME auf dieses Commit zurücksetzen" ausgewählt.

Navigieren Sie dann zum lokalen Verzeichnis Ihres Repositorys und führen Sie den folgenden Befehl aus:

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

Dadurch werden alle Commits nach dem aktuellen in Ihrem lokalen Repository gelöscht, jedoch nur für diesen einen Zweig.


Ein einzelner Befehl:

git reset --soft 'HEAD^' 

Es funktioniert hervorragend, um das letzte lokale Commit rückgängig zu machen!


Es gibt viele Möglichkeiten, dies zu tun:

Git-Befehl zum Rückgängigmachen des letzten Commits / der vorherigen Commits:

Warnung: Verwenden Sie --hard nicht, wenn Sie nicht wissen, was Sie tun. --hard ist zu gefährlich und kann Ihre Dateien löschen.

Der grundlegende Befehl zum Wiederherstellen des Commits in Git ist:

$ git reset --hard <COMMIT -ID>

oder

$ git reset --hard HEAD~<n>

COMMIT-ID : ID für das Commit

n: ist die Anzahl der letzten Commits, die Sie zurücksetzen möchten

Sie können die Festschreibungs-ID wie folgt erhalten:

$ **git log --oneline**

d81d3f1 function to subtract two numbers

be20eb8 function to add two numbers

bedgfgg function to mulitply two numbers

Dabei sind d81d3f1 und be20eb8 Commit-ID.

Nun sehen wir einige Fälle:

Angenommen, Sie möchten das letzte Commit 'd81d3f1' zurücksetzen. Hier sind zwei Möglichkeiten:

$ git reset --hard d81d3f1

oder

$ git reset --hard HEAD~1

Angenommen, Sie möchten die Festschreibung "be20eb8" zurücksetzen:

$ git reset --hard be20eb8

Für detailliertere Informationen können Sie auch einige andere Befehle zum Zurücksetzen des Heads auf einen bestimmten Status aufrufen und ausprobieren:

$ git reset --help

Es gibt zwei Hauptszenarien

Sie haben das Commit noch nicht getrieben

Wenn es sich bei dem Problem um zusätzliche Dateien handelt, die Sie festgeschrieben haben (und Sie diese nicht für das Repository verwenden möchten), können Sie sie mit git rm entfernen und dann mit --amend

git rm <pathToFile>

Sie können auch ganze Verzeichnisse mit -r entfernen oder sogar mit anderen Bash Befehlen kombinieren

git rm -r <pathToDirectory>
git rm $(find -name '*.class')

Nach dem Entfernen der Dateien können Sie die Option --amend verwenden

git commit --amend -C HEAD # the -C option is to use the same commit message

Dadurch werden Ihre letzten lokalen Commits durch das Entfernen der zusätzlichen Dateien neu geschrieben. Diese Dateien werden also niemals per Push gesendet und auch von GC aus Ihrem lokalen .git-Repository entfernt.

Sie haben das Commit bereits verschoben

Sie können dieselbe Lösung für das andere Szenario anwenden und dann git push mit der Option -f Dies wird jedoch nicht empfohlen, da der Remote-Verlauf mit einer abweichenden Änderung überschrieben wird (dies kann Ihr Repository durcheinander bringen).

Stattdessen müssen Sie das Commit ohne --amend (denken Sie an -amend`: Diese Option schreibt den Verlauf des letzten Commits neu).


Führen Sie dies einfach in Ihrer Befehlszeile aus:

git reset --soft HEAD~ 

Geben Sie git log und suchen Sie den Hashcode für das letzte Commit. Geben Sie dann Folgendes ein:

git reset <the previous co>

Ich habe eine Weile gebraucht, um herauszufinden, vielleicht hilft das ja jemandem ...

Es gibt zwei Möglichkeiten, Ihr letztes Commit "rückgängig zu machen", abhängig davon, ob Sie Ihr Commit bereits öffentlich gemacht haben (Push an Ihr Remote-Repository):

So machen Sie ein lokales Commit rückgängig

Nehmen wir an, ich habe mich lokal engagiert, möchte das Commit jedoch jetzt entfernen.

git log
    commit 101: bad commit    # latest commit, this would be called 'HEAD'
    commit 100: good commit   # second to last commit, this is the one we want

Um alles wieder so zu machen, wie es vor dem letzten Commit war, müssen wir es vor HEAD auf das Commit reset :

git reset --soft HEAD^     # use --soft if you want to keep your changes
git reset --hard HEAD^     # use --hard if you don't care about keeping the changes you made

Jetzt zeigt git log , dass unser letzter Commit entfernt wurde.

So machen Sie ein öffentliches Commit rückgängig

Wenn Sie Ihre Commits bereits veröffentlicht haben, möchten Sie ein neues Commit erstellen, das die Änderungen, die Sie in Ihrem vorherigen Commit (aktuellen HEAD) vorgenommen haben, "zurücksetzt".

git revert HEAD

Ihre Änderungen werden nun rückgängig gemacht und stehen für Sie bereit:

git commit -m 'restoring the file I removed by accident'
git log
    commit 102: restoring the file I removed by accident
    commit 101: removing a file we don't need
    commit 100: adding a file that we need

Weitere Informationen finden Sie unter Git-Grundlagen - Rückgängigmachen von Dingen


Ich wollte die letzten 5 Commits in unserem gemeinsamen Repository rückgängig machen. Ich habe die Revisions-ID nachgeschlagen, zu der ich einen Rollback ausführen wollte. Dann habe ich folgendes eingegeben.

prompt> git reset --hard 5a7404742c85
HEAD is now at 5a74047 Added one more page to catalogue
prompt> git push origin master --force
Total 0 (delta 0), reused 0 (delta 0)
remote: bb/acl: neoneye is allowed. accepted payload.
To [email protected]:thecompany/prometheus.git
 + 09a6480...5a74047 master -> master (forced update)
prompt>

In meinem Fall habe ich versehentlich Dateien eingereicht, die ich nicht wollte. Also habe ich folgendes gemacht und es hat funktioniert:

git reset --soft HEAD^
git rm --cached [files you do not need]
git add [files you need]
git commit -c ORIG_HEAD

Überprüfen Sie die Ergebnisse mit gitk oder git log --stat


Setzen Sie es einfach mit git :

git reset --soft HEAD~1

Erklären Sie: Was git reset bewirkt, wird im Grunde auf alle Commits zurückgesetzt, zu denen Sie zurückkehren --soft Wenn Sie es mit --soft key kombinieren, wird es zurückgehen, aber die Änderungen in Ihren Dateien bleiben erhalten, so Sie gelangen zurück zu der Stufe, in der die Datei gerade hinzugefügt wurde. HEAD ist der Kopf der Verzweigung und wenn Sie mit ~1 kombinieren (in diesem Fall verwenden Sie auch HEAD^ ), wird nur ein Commit ausgeführt, was Sie möchten. ..

Ich erstelle die Schritte im Bild unten detaillierter für Sie, einschließlich aller Schritte, die in realen Situationen auftreten können, und legen den Code fest:


Verwenden Sie git revert commit-id

Um die Commit-ID zu erhalten, verwenden Sie einfach git log


Verwenden Sie reflog, um einen korrekten Status zu finden

git reflog

REFLOG VOR RESET

Wählen Sie den korrekten Reflog (in meinem Fall f3cb6e2) und geben Sie ein

git reset --hard f3cb6e2

Danach wird der Repo-HEAD auf diesen HEADid zurückgesetzt LOG NACH RESET

Schließlich sieht der Reflog wie auf dem Bild unten aus

REFLOG FINALE


Wenn Sie Dateien beim letzten Commit entfernen möchten, können Sie Folgendes verwenden:

git reset --hard HEAD~1

Und wenn Sie Dateien im letzten Commit benötigen, können Sie Folgendes verwenden:

git reset --soft HEAD~1

Wenn Sie Junk begangen haben, aber nicht getrieben

git reset --soft HEAD~1

HEAD ~ 1 ist eine Abkürzung für das Commit vor dem Kopf. Alternativ können Sie sich auf den SHA-1 des Hash beziehen, wenn Sie auf zurücksetzen möchten. --soft Option löscht das Festschreiben , aber alle geänderten Dateien bleiben "Änderungen für das Festschreiben ", wie es der git-Status bedeuten würde.

Wenn Sie Änderungen an nachverfolgten Dateien im Arbeitsbaum seit dem Commit vor dem Kopf entfernen möchten, verwenden Sie stattdessen " --hard ".

ODER

Wenn Sie bereits gedrückt und jemand gezogen hat, was normalerweise mein Fall ist, können Sie git reset nicht verwenden. Sie können jedoch einen Git-Revert machen ,

git revert HEAD

Dadurch wird ein neues Commit erstellt, das alles zurücknimmt, das durch das versehentliche Commit eingeführt wurde.


Wenn Sie es dauerhaft rückgängig machen möchten und ein Repository geklont haben

Die Festschreibungs-ID kann durch gesehen werden

git log 

Dann kannst du -

git reset --hard <commit_id>

git push origin <branch_name> -f

Wie mache ich das letzte Git-Commit rückgängig?

Um alles wieder so zu machen, wie es vor dem letzten Commit war, müssen wir das Commit vor HEAD zurücksetzen.

  1. Wenn Sie Ihre vorgenommenen Änderungen nicht beibehalten möchten:

    git reset --hard HEAD^
    
  2. Wenn Sie Ihre Änderungen beibehalten möchten:

    git reset --soft HEAD^
    

Überprüfen Sie jetzt Ihr Git-Log. Es wird zeigen, dass unser letzter Commit entfernt wurde.





git-revert