2011-02-02 15 views
19

Jak mogę "przywrócić" ostatnie zatwierdzenie w git bez usuwania jakichkolwiek zmian?odpowiednik git dla cofnięcia hg

To jest coś robiłem często w GW:

  • Commit "Fixed 107."
  • pamiętać, że zapomniałem zrobić coś
  • Hg wycofywania
  • Czy coś
  • Commit "Fixed 107."

Odpowiedz

18

Z git może faktycznie wolisz użyć opcji --amend w tym przypadku.

  • Zob. "Naprawiono 107."
  • pamiętać, że zapomniałem zrobić coś
  • coś zrobić
  • git commit --amend i edytować notatki

Jeśli trzeba wycofać z innych powodów przyjrzeć git revert

+6

'revert' to sposób radzenia sobie tylko z jednym z kilku innych powodów. Jeśli zgłoszenie, o którym mowa, zostało opublikowane, użyj funkcji 'git revert'. Jeśli nie został naciśnięty i jest to najnowszy commit, użyj 'git reset [--hard] HEAD ^'. Jeśli nie zostało ono pchnięte i nie jest najnowszym zatwierdzeniem, użyj 'git rebase -i', aby usunąć go z historii, pozostawiając resztę nietkniętą. – Cascabel

+3

Uważaj na git noobs (jak ja).Zrobiłem "git reset HEAD ^" i to nie tylko usunęło moje zatwierdzenie z historii, ale także przywróciło przesłane pliki do poprzedniego stanu zatwierdzenia. –

+0

@ gaviLima 'git reset HEAD ^' nie powinien tego robić, powinien tylko modyfikować pliki w twoim katalogu roboczym, jeśli używasz również flagi '--hard'. – dubiousjim

3

W tym konkretnym przypadku miałbym git commit --amend. Jeśli jeszcze nie pchnąłeś i już popełniłeś inne zmiany, możesz również użyć git rebase -i, aby edytować dowolne zatwierdzenie.

1

starałem się wykonaj wycofanie hg w repozytorium git i udało mi się użyć

git reset HEAD~ 

to pozostawiło mnie z moimi zmianami w katalogu roboczym, ale teraz nie są one rejestrowane. Source

15

Spróbuj tego:

git reset --soft HEAD^ 

I okazało się, że to samo z 'wycofywania hg', ponieważ:

  • ostatni popełnić anulowane
  • zmiany zachowane
  • plików poprzednio popełnionych są wystawiane:

Można również utworzyć alias rollback git tak:

git config --global alias.rollback 'reset --soft HEAD^' 

Więc może teraz wystarczy wpisać git rollback mieć dokładnie taką samą komendę, że masz na Mercurial.