Jak zatrzymać zatwierdzenie Git, gdy VI jest na ekranie i czeka na komunikat zatwierdzenia?

203

Poprosiłem Gita o wykonanie zatwierdzenia z poziomu git bash, To wywołało VI, jak zawsze.

Chcę teraz anulować zatwierdzenie. Jak mogę zapobiec kontynuowaniu zatwierdzenia od tego momentu?

Ben Aston
źródło
Warto dodać, że musisz nacisnąć Esc przed wejściem :q!do wyjścia z vima.
M_Merciless

Odpowiedzi:

331

Masz dwie opcje:

  • Podaj pusty komunikat zatwierdzenia. Jeśli jest to nowy zatwierdzenie, a wiadomość nie została jeszcze zapisana, możesz po prostu użyć :q!(wyjść bez zapisywania). Jeśli już zapisałeś (lub zmieniasz poprzednie zatwierdzenie), po prostu usuń cały komunikat dziennika i zapisz ponownie. Można to zrobić za pomocą ggdG+ :wqw Vimie.

  • Poproś edytora o wyjście z niezerowym kodem wyjścia. W Vimie możesz użyć :cq(wyjść z kodem błędu).

Warto zauważyć, że zawsze możesz zresetować kopię roboczą do stanu, w jakim była przed zatwierdzeniem git reset HEAD^.

Eugene Yarmash
źródło
95
: cq to biznes. Z jakiegoś powodu git działa bez względu na to, czy użyję: q!
Sirex,
2
git reset HEAD ^
odrzuciłby
2
: q! prawdopodobnie nie działa, ponieważ istnieje już zdefiniowana wiadomość, właśnie ją edytujesz.
Papipo
Czkawka: Jeśli git reset HEAD^poprosi o więcej, twoja powłoka może interpretować ^ jako kontynuację linii. Spróbuj git reset "HEAD^", git reset HEAD^^lub git reset HEAD~1zamiast tego na tę odpowiedź: stackoverflow.com/questions/14203952/git-reset-asks-more
Jake Stevens-Haas
75
  • :q!nie działa podczas zmiany zatwierdzenia. Nie aktualizuje komunikatu zatwierdzenia, ale wykonuje zmianę :-(
  • :cq całkowicie przerywa poprawkę.
Daniel Pinyol
źródło
1
Chciałbym móc dodać kolejne +1. Byłem tu wiele razy, kiedy moja poprawka wybiera niewłaściwe zatwierdzenie.
Wyrmwood
8

Podsumowując:

  • Podczas tworzenia nowego zatwierdzenia (tj. git commit) Zakończ używając :q!.
  • Podczas zmiany (tj. git commit --amend) Usuń komunikat zatwierdzenia (tylko kilka pierwszych wierszy, które nie zaczynają się od #), na przykład przytrzymując v i używając klawiszy strzałek, aby je wybrać, a następnie naciskając klawisz Delete. Wyjdź z, :wqaby zastosować zmiany ! Jeśli użyjesz, :q!zmiany zostaną utracone i użyty zostanie poprzedni komunikat zatwierdzenia.

Podczas korzystania z VIM w obu przypadkach można wyjść z :cq- VIM zakończy działanie z kodem błędu i zatwierdzenie zostanie przerwane.

Maciej Piekarski
źródło