Làm cách nào để dừng cam kết Git khi VI ở trên màn hình chờ tin nhắn cam kết?


203

Tôi đã yêu cầu Git thực hiện một cam kết từ bên trong git bash, Nó đã đưa lên VI như mọi khi.

Bây giờ tôi muốn hủy bỏ cam kết, làm cách nào để ngăn chặn việc tiến hành cam kết từ thời điểm này?


Đáng nói thêm là bạn cần phải đặt trước Esc trước khi vào :q!để thoát vim.
M_Merciless

Câu trả lời:


332

Bạn có hai lựa chọn:

  • Cung cấp một thông điệp cam kết trống. Nếu đó là một cam kết mới và bạn chưa lưu tin nhắn, bạn chỉ cần sử dụng :q!(thoát mà không lưu). Nếu bạn đã lưu (hoặc bạn đang sửa đổi một cam kết trước đó), chỉ cần xóa toàn bộ thông điệp tường trình và lưu lại. Điều này có thể được thực hiện với ggdG+ :wqtrong Vim.

  • Có trình soạn thảo thoát với mã thoát khác không. Trong Vim, bạn có thể sử dụng :cq(thoát với mã lỗi).

Điều đáng chú ý là bạn luôn có thể đặt lại bản sao làm việc của mình về trạng thái trước khi cam kết git reset HEAD^.


96
: cq là doanh nghiệp. Đối với một số lý do git cày trên bất kể nếu tôi sử dụng: q!
Sirex

2
git reset ĐẦU ^ sẽ loại bỏ các sửa đổi cục bộ
juanmf

2
: q! có thể không hoạt động vì đã có một thông báo được xác định trước, bạn chỉ đang chỉnh sửa nó.
Papipo

Hic: Nếu git reset HEAD^yêu cầu thêm, vỏ của bạn có thể hiểu ^ là tiếp tục dòng. Hãy thử git reset "HEAD^", git reset HEAD^^hoặc git reset HEAD~1thay vào đó theo câu trả lời này: stackoverflow.com/questions/14203952/git-reset-
task-more

76
  • :q!không hoạt động khi sửa đổi một cam kết. Nó không cập nhật thông điệp cam kết, nhưng nó thực hiện sửa đổi :-(
  • :cq hủy bỏ hoàn toàn việc sửa đổi

1
Tôi ước tôi có thể thêm +1. Tôi đã ở đây vô số thời gian khi bản sửa đổi của tôi nhận được cam kết sai.
Wyrmwood

8

Tóm lại:

  • Khi tạo một cam kết mới (tức là git commit) bỏ sử dụng :q!.
  • Khi sửa đổi (nghĩa là git commit --amend) xóa thông báo cam kết (chỉ một vài hàng đầu tiên không bắt đầu bằng #), ví dụ bằng cách giữ v và sử dụng các phím mũi tên để chọn nó và sau đó nhấn Xóa. Thoát khỏi :wqđể áp dụng thay đổi ! Nếu bạn sử dụng, :q!các thay đổi sẽ bị mất và thông báo cam kết trước đó sẽ được sử dụng.

Khi sử dụng VIM, cả hai trường hợp đều thoát được :cq- VIM sẽ thoát với mã lỗi và cam kết sẽ bị hủy bỏ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.