wake-up-neo.com

Wie man das letzte nicht-getegte Commit aufhebt, ohne die Änderungen zu verlieren

Gibt es eine Möglichkeit, ein Commit rückgängig zu machen, so dass meine lokale Kopie behält die in diesem Commit vorgenommenen Änderungen, aber sie werden nicht zugesagte Änderungen in meiner Arbeitskopie? Wenn Sie ein Commit zurücksetzen, gelangen Sie zum vorherigen Commit. Ich möchte die vorgenommenen Änderungen beibehalten, aber ich habe sie für den falschen Zweig festgelegt.

Dies wurde nicht vorangetrieben, sondern nur begangen.

337
Mr. Boy

Dafür gibt es viele Möglichkeiten, zum Beispiel:

für den Fall, dass Sie nicht öffentlich zum Commit gebracht haben:

git reset HEAD~1 --soft   

Das heißt, Ihre Commit-Änderungen werden in Ihrem Arbeitsverzeichnis gespeichert, während das LAST-Commit aus Ihrem aktuellen Zweig entfernt wird. Siehe git reset man


Falls Sie did öffentlich (in einem Zweig namens 'master') drücken:

git checkout -b MyCommit //save your commit in a separate branch just in case (so you don't have to Dig it from reflog in case you screw up :) )

commit normalerweise zurücksetzen und Push drücken 

git checkout master
git revert a8172f36 #hash of the commit you want to destroy
# this intorduces a new coomit (say, it's hash is 86b48ba) which removes changes, introduced in the coomit in question (but those changes are still visible in the history)
git Push Origin master

wenn Sie diese Änderungen jetzt als lokale Änderungen in Ihrer Arbeitskopie haben möchten ("damit Ihre lokale Kopie die in diesem Commit vorgenommenen Änderungen beibehält"), setzen Sie das Zurücksetzungs-Commit mit der Option -no-commit zurück:

git revert --no-commit 86b48ba (hash of the revert commit).

Ich habe ein kleines Beispiel erstellt: https://github.com/Isantipov/git-revert/commits/master

624
Isantipov

Wenn Sie die Änderungen übernommen haben, können Sie sie undo verwenden und die Dateien wieder auf die Bühne verschieben, ohne einen anderen Zweig zu verwenden.

git show HEAD > patch
git revert HEAD
git apply patch

Es wird eine Patch-Datei erstellt, die die letzten Änderungen der Änderungen enthält. Dann werden die Änderungen rückgängig gemacht. Anschließend wenden Sie die Patch-Dateien auf den Arbeitsbaum an.

Bei mir passiert das meistens, wenn ich Push in den falschen Zweig wechsle und später merke. Und meistens funktioniert das Nacharbeiten. 

git revert commit-hash
git Push

git checkout my-other-branch
git revert revert-commit-hash
git Push
  1. das Commit zurücksetzen 
  2. (erstellen und) andere Zweigstelle auschecken
  3. den Revert zurücksetzen 
2
Mubashar Ahmad

Bitte sichern Sie Ihre Änderungen, bevor Sie diese Befehle in einem separaten Ordner ausführen

git checkout Zweigname

Kasse in Ihrer Filiale

git merge --abort

Abbrechen der Zusammenführung

git-Status

Überprüfen Sie den Status des Codes nach dem Abbruch der Zusammenführung

git reset --hard Herkunft/Zweigname

mit diesem Befehl werden Ihre Änderungen zurückgesetzt und der Code an den Zweigcode (Branch_Name) angepasst. 

0
Mohit Singh

Für den Fall: "Dies wurde nicht verschoben, nur festgeschrieben ." - Wenn Sie IntelliJ (oder eine andere JetBrains-IDE) verwenden, können Sie dies als Nächstes tun.

Gehen Sie zum Fenster für die Versionskontrolle ( Alt + 9 ) - Registerkarte "Log" . Klicken Sie mit der rechten Maustaste auf ein Commit vor dem letzten . Setzen Sie den aktuellen Zweig auf hier -> Wählen Sie Soft -> Push Reset .

Erledigt.

Dies wird Ihre Änderungen "aufheben" (Sie verlieren sie nicht) und bringen Sie an den Punkt vor Ihrem letzten lokalen Commit zurück.

0