Resetuj wszystkie zmiany po ostatnim zatwierdzeniu w git

324

Jak mogę cofnąć każdą zmianę dokonaną w moim katalogu po ostatnim zatwierdzeniu, w tym usuwanie dodanych plików, resetowanie zmodyfikowanych plików i dodawanie z powrotem usuniętych plików?

Dogbert
źródło
możliwy duplikat Revert do poprzedniego Git commit
nawfal
8
@nawfal może być duplikatem, ale „zresetuj wszystkie zmiany po ostatnim zatwierdzeniu” odpowiada większej liczbie kryteriów wyszukiwania (słowa wyszukiwane w google) niż odpowiadające „jak przywrócić repozytorium git”. Przynajmniej dla ludzi takich jak ja, którzy nie mają angielskiego jako języka ojczystego: d
Shirish Herwade

Odpowiedzi:

561

Najpierw zresetuj zmiany

git reset HEAD --hard

następnie wyczyść wszystko z nie śledzonych. Jeśli chcesz zachować pliki, które nie są śledzone z powodu .gitignore, zachowaj ostrożność przy użyciu tego polecenia.

git clean -fd
Benjamin Bannier
źródło
7
@Adam: Czasami możesz chcieć również -xskorzystać z tej opcji git clean, która nakazuje również usunięcie zignorowanych plików.
Cascabel
31
Jeśli chcesz zachować pliki, które nie są śledzone z powodu .gitignore, bądź ostrożny z git clean -fdpoleceniem.
bitsoflogic
3
@Levinaris: Jest odwrotnie, git clean -fdaby nie usuwać ignorowanych plików. -xbędzie.
Robert Siemer,
5
@RobertSiemer Właściwie to może! Jeśli masz jakieś foldery złożone w całości z ignorowanych plików, usunie te foldery, usuwając w ten sposób zignorowane pliki. Rozważ plik .gitignore, taki jak tutaj: stackoverflow.com/q/25554504/456645 . W tym przykładzie załóżmy, że niektóre foldery nie mają plików PHP. git clean -fdusunie te foldery i nieśledzone pliki. Testowane z wersją git 1.9.1
bitsoflogic
3
ale dlaczego w ogóle potrzebne jest drugie „czyszczenie”?
Shirish Herwade,
71

Jak mogę cofnąć każdą zmianę dokonaną w moim katalogu po ostatnim zatwierdzeniu, w tym usuwanie dodanych plików, resetowanie zmodyfikowanych plików i dodawanie ponownie usuniętych plików?

  1. Możesz cofnąć zmiany w śledzonych plikach za pomocą:

    git reset HEAD --hard
    
  2. Możesz usunąć nieśledzone pliki za pomocą:

    git clean -f
    
  3. Możesz usunąć nieśledzone pliki i katalogi za pomocą:

    git clean -fd
    

    ale nie można cofnąć zmiany na nieśledzone pliki .

  4. Możesz usunąć zignorowane i nieśledzone pliki i katalogi

    git clean -fdx
    

    ale nie można cofnąć zmiany na ignorowane pliki .

Można również ustawić clean.requireForcena false:

git config --global --add clean.requireForce false

aby uniknąć używania -f( --force) podczas używania git clean.

Ortomala Lokni
źródło
2
Świetnie, właśnie tego potrzebowałem. Dziękujemy za porównanie wszystkich odpowiednich poleceń!
Marquee,
-1

W tej sytuacji działają dwa polecenia,

root> git reset --hard HEAD ~ 1

root> git push -f

Więcej poleceń git można znaleźć na tej stronie

RKS
źródło
1
git push -fnie jest związany z pytaniem i w tym scenariuszu jest niebezpieczny
mustache1up