2013-04-23 15 views
13

Was ist der schnellste Weg, um Änderungen in Git rückgängig zu machen (inszeniert und nicht)?Wie schnell inszenierte und nicht gestartete Änderungen in git rückgängig machen?

Beide Dateien nicht gespeichert.

$ git status -s 
M file1.txt # unstaged 
?? oops.txt # unstaged 

Eine Datei inszeniert, eine Datei nicht gesetzt.

$ git status -s 
M file1.txt # staged 
?? oops.txt # unstaged 

Ich kann add alle zu indizieren und dann stashsave und drop.

$ git add . 
$ git stash save 
$ git stash drop 
$ git status 
nothing to commit, working directory clean 

Gibt es einen schnelleren Weg?

Antwort

23

Sie müssen zwei Befehle verwenden: git reset --hard und git clean -fd. git reset --hard rückgängig alle gestuften Änderungen und git reset -fd, nicht geänderte Änderungen (Dateien und Verzeichnisse). Sie können einen Alias ​​erstellen, der die beiden Befehle ausführt. Dazu fügen Sie einfach die folgenden Zeilen in der .gitconfig:

[alias] 
    undo = '!git reset --hard && git clean -fd' 
+2

Ich habe einen Alias ​​'undo =!" Hinzugefügt git reset --hard && git clean -f "' – hIpPy

+2

schön .. und wenn Sie sich fragen, wo der Knall herkommt: http://stackoverflow.com/questions/10641451/ what-is-the-Bedeutung-des-Knall-oder-vor-dem-Git-Befehl – Calaf

+1

Diese Antwort verwendet falsche Terminologie. 'git reset --hard' ** verwirft alle Änderungen, inszeniert im Index und nicht im Arbeitsbaum **. 'git clean -fd' entfernt alle Dateien und Verzeichnisse **, die nicht verfolgt werden **. Zum Beispiel alles, was lokal als '.o' Dateien erstellt wird,' config.make' aus einem Konfigurations-Skript, Ihre 'Tags' und so weiter. – Kaz

5

können Sie git clean

 
$ git status -s 
?? oops.txt 

$ git clean -f 
Removing oops.txt 

$ git status -s 

Weitere Daten verwenden:

Reinigen den Arbeitsbaum durch rekursiv Dateien zu entfernen, die nicht unter Versionskontrolle sind, aus dem aktuellen Verzeichnis zu starten.

+2

Ich muss beide tun, obwohl 'git reset --hard' und' git clean -f'. – hIpPy

13
git reset HEAD 
git checkout . 

git reset HEAD werden alle Änderungen und `git checkout unstage‚. verwirft alle Änderungen.

Verwandte Themen