2015-04-09 20 views
11

Pracowałem w oddziale i musiałem wrócić do mistrza, aby szybko to naprawić, więc wykonałem swoją pracę w toku.Jak "ponownie otworzyć" ostatnie zatwierdzenie git?

Teraz jestem z powrotem w mojej branży i chciałbym powrócić do stanu, w którym nie popełniłem, ale wszystkie moje zmiany są stosowane i gotowe do zatwierdzenia (tj. Anulować poprzednie zatwierdzenie, ale moje zmiany nie zostały utracone i są one pokazane w git status).

Zmiana poprzedniego zatwierdzenia nie jest dla mnie wystarczająca, ponieważ chcę zobaczyć zmienione pliki i linie (ułatwia to pracę nad zmianą).

Wiem, że skrytka git byłaby lepszym rozwiązaniem, ale jest już za późno. Mam również tendencję do mieszania (lub tracenia) moich ukrytych zobowiązań, ponieważ nie są one powiązane z odgałęzieniem.

+2

Wykonaj miękki reset swojej gałęzi: po sprawdzeniu, uruchom 'git reset --soft HEAD ^'. To sprawi, że twój oddział wskaże na zatwierdzenie przed tym, który ci przeszkadza, bez zmiany indeksu lub drzewa roboczego. – Jubobs

Odpowiedz

14

Istnieją dwa sposoby, aby rozwiązać ten problem:

  1. Czy reset (na master oddziału, czy cokolwiek oddział fałszywy popełnić jest):

    git reset --soft HEAD~1 
    

    HEAD~1 jest względne adres jak wyjaśniono here.

  2. zachować pracę i wykonać poprawkę:

    git commit --amend 
    

    W takim przypadku udajesz nic się nie stało, dalej pracować na oddziale i zadzwonić, kiedy planowaliśmy zrobić rzeczywiście popełnienia polecenia. Ty rodzaj nadpisujesz ostatnie zatwierdzenie ze wszystkimi zmianami i (opcjonalnie) nową wiadomość.

I pro forma: to rzeczywiście - jak wspomina siebie - lepiej wykonać git stash, tylko mówi do ludzi, którzy widzą tę odpowiedź przez przypadek i myślę powyższe jest powszechną praktyką (jest to nie).

2

Należy użyć git reset HEAD~1 (bez --hard opcja)

Będzie to zrobić dokładnie to, co chcesz i HEAD ~ 1 oznacza tu, że chcesz zresetować jeden commit, licząc od głowy (u góry) z historii .

Nie będzie to miało wpływu na żadne pliki w systemie plików, więc git zobaczy teraz edytowane pliki jako zmienione, ale nie zatwierdzone.

+0

Być może lepiej jest jawnie podać '--soft'. Wiem, że jest bardzo mało prawdopodobne, że domyślne zachowanie się zmieni, ale jeśli tak, niektóre odpowiedzi mogą być nieaktualne. –

+0

Zgadzam się. Ale tak czy inaczej, nie zmieniło się przez jakiś czas, więc prawdopodobnie będzie można go bezpiecznie używać bez '' --soft''' :) –

4

Z mojego punktu widzenia, chcesz cofnąć ostatnie zatwierdzenie do oddziału, zachowując wszystkie zmiany od zatwierdzenia nienaruszonego i wystawionego.

Możesz spróbować użyć polecenia git resetowania, jak wymienione poniżej:

git reset --soft HEAD^ 

To powinno wziąć twój ostatni popełnić i cofnąć go, zachowując wszystkie zmiany wystawił.

Powiązane problemy