Wenn ich versehentlich eine Datei an die falsche Verzweigung übergeben habe, verwende ich normalerweise git reset --hard HEAD~1
. Bei der Verwendung dieser Methode verliere ich jedoch generell alle festgeschriebenen Dateien. Gibt es eine Möglichkeit, ein Commit zurückzusetzen, ohne die bearbeiteten Dateien zu verlieren?Zurücksetzen, ohne bereits festgeschriebene Dateien zu verlieren
Antwort
nicht verwenden --hard
verwenden Sie stattdessen --soft
.
Wenn Sie also Ihre neuesten entfernen möchten commit Sie tun würde:
git reset --soft HEAD^
Während Alex sehr korrekt ist, könnte ich versucht sein, eine andere Reihenfolge versuchen:
Wenn ich wollte commit auf einem noch-zu-sein-geboren Zweig:
git branch newbranch
git reset --hard HEAD^
Wenn ich das Commit auf einem bestehenden Zweig wollte:
git checkout otherbranch
git cherry-pick firstbranch
git checkout firstbranch
git reset --hard HEAD^
Das vollständige Beispiel für die Antwort von Alex
git reset --soft HEAD^
git checkout otherbranch
git commit -am "Message"
Hinweis das letzte Beispiel schlecht ausfallen wird, wenn der Versuch der Wechsel in den anderen Zweig zu „schweben“ aufgrund von Konflikten fehlschlägt. Sie müssen dann stash/checkout/anwenden, um in Konfliktlösung zu gelangen.
große Antwort! Ich denke, es geht darum, nur einige Änderungen wegzuwerfen, die beim letzten Commit gemacht wurden und die andere Hälfte behalten. In diesem Fall würden Sie das Commit einfach wegwerfen und die Änderungen, die Sie behalten möchten, erneut hinzufügen. In diesem Fall könnte "git add --interactive" auch nützlich sein! – Alex
@cherrun, auch über das Lesen [Reset Demystified] (http://git-scm.com/2011/07/11/reset.html). – kostix
+1 für eine kurze und genaue Antwort. Zusammenfassend verwenden Sie: 'git reset --soft HEAD ~ 1' – VarunPandey