Làm thế nào tôi có thể loại bỏ thay đổi tập tin từ cửa sổ trạng thái chạy trốn?


33

Khi trong cửa sổ trạng thái fugitive-plugin , được truy cập bằng cách sử dụng , có thể thay đổi khác nhau cho một tệp bằng cách sử dụng và chuyển đổi các tệp để cam kết sử dụng .:GstatusD-

Có bất kỳ phím tắt tương tự để loại bỏ các thay đổi, với loại bỏ tôi có nghĩa là tương đương git checkout -- filename?

Cập nhật:

Tìm thấy một yêu cầu tính năng trên trang github chạy trốn Vấn đề # 97: Phím tắt để kiểm tra / xóa tệp

Theo đó, cách ưa thích là sử dụng :Gread :w

Cập nhật 2:

Kể từ tháng 6 năm 2014, có thể sử dụng Unhư được trả lời bởi Anson bên dưới .

Cập nhật 3: Kể từ ngày 3 tháng 1 năm 2019, việc bấm phím được ánh xạ tớiX

Câu trả lời:


27

Chức năng này đã được thêm vào tháng 6 năm 2014 và theo mặc định được ánh xạ tới U.

Đoạn thông tin này nằm trong tệp trợ giúp bên dưới :h :Gstatus:

     U     |:Git| checkout HEAD

Yêu cầu và thảo luận về tính năng:
https://github.com/tpope/vim-fugitive/issues/97

Cam kết:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63


Nếu đó là không có giấy tờ, nó có thể được hiểu là không an toàn. Sẽ không khó để phát hiện ra bạn đã ghi lại những thay đổi cục bộ của mình vì một tổ hợp phím ma thuật không có giấy tờ?
sehe

2
Cập nhật 2019 ngay bây giờX
Oguz Bilgic

Bất cứ ai có đặc quyền chỉnh sửa, vui lòng chỉnh sửa nó thành X?
chriz

15

Bạn có thể sử dụng lệnh fugitive , Greadđể thay thế nội dung của bộ đệm bằng các phiên bản khác nhau của tệp bộ đệm (nghĩa là phải được thực hiện từ bộ đệm của tệp chứ không phải từ :Gstatusbộ đệm).

  • :Gread(không có đối số) sẽ sử dụng phiên bản của tập tin từ các chỉ số .
  • :Gread - sẽ sử dụng phiên bản của tệp từ cam kết CHÍNH.

Xem tài liệu tại :help fugitive-revisionđể biết danh sách các thông số kỹ thuật sửa đổi khác mà fugitive hỗ trợ (hai cái ở trên có lẽ là những thứ hữu ích nhất ngay lập tức).

Quy :Greadtrình công việc tiến hành như thế này:

  1. :Gread
  2. fugitive xóa bộ đệm hiện tại và đọc nội dung từ chỉ mục
  3. Kết quả : Bộ đệm hiện có cùng nội dung với chỉ mục. Các tập tin cây làm việc không được thay đổi.
  4. Bạn có thể theo dõi :wđể lưu tệp vào cây làm việc (hoặc sử dụng :Gread|wnếu bạn biết rằng bạn sẽ muốn lưu nó ngay lập tức).

Quy :Git checkout -- %trình công việc tiến hành như thế này:

  1. :Git checkout -- %
  2. Git sao chép phiên bản của tệp trong chỉ mục vào tệp trong cây làm việc.
  3. Vim thông báo rằng tập tin đã được thay đổi bên ngoài trình chỉnh sửa và nhắc bạn bỏ qua hoặc tải lại nó.
  4. Bạn bảo Vim tải lại tập tin.
  5. Kết quả : Cả tệp cây làm việc và bộ đệm hiện có nội dung từ chỉ mục.

Tóm tắt: :Greadtránh tập tin đã thay đổi kể từ khi chỉnh sửa bắt đầu nhắc nhở và cho phép bạn quyết định khi nào bạn muốn sửa đổi tập tin trong cây làm việc.


Khi bộ đệm biểu thị một giai đoạn chỉ mục của tệp thay vì tệp từ cây làm việc, hãy :Greadđọc từ nội dung của tệp khi nó tồn tại trên đĩa trong cây làm việc thay vì giai đoạn 0 của chỉ mục.


Ánh xạ cho gstatus để hoàn nguyên tệp:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor

1

Ánh xạ cho gstatus để hoàn nguyên tệp:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>

Điều này hoạt động rất tốt, chỉ có nhược điểm là tôi sẽ nhận được hộp thoại mà tập tin đã thay đổi trên đĩa và nếu tôi muốn tải lại nó. Sẽ tốt đẹp nếu nó im lặng.
tidbeck

1
Điều đó thậm chí còn tốt hơn IMO khi bạn nhận được xác nhận rằng tập tin thực sự được hoàn nguyên. Nhưng tự động tải lại im lặng có thể được thực hiện với tùy chọn 'autoread' ( :help autoread). Khác sau đó bạn có thể bufdo etrong vòng trên au.
Majkinetor

0

Vâng, bạn đã thử :help fugitivechưa?

Rõ ràng là không, không có phím tắt cho tính năng Git này.


Có tôi đã làm. Đã có những lúc tôi không tìm thấy một tính năng nào trong sự giúp đỡ có mặt không bao giờ ít hơn. Ý kiến ​​của bạn là bạn không bao giờ nên hỏi về một tính năng không có trong trợ giúp cho chương trình / plugin?
tidbeck

Vâng, điều đó cũng xảy ra với tôi: có một chức năng mà tôi có thể làm được :callnhưng không có lệnh liên quan. Tôi không nhớ tên của plugin Align Align? bất cứ điều gì, ý kiến ​​của tôi là người ta nên đọc các tài liệu trước khi hỏi xung quanh. Mà bạn đã làm. Thật tuyệt. Nhưng bước thứ hai hợp lý, sau khi đọc tài liệu, sẽ là IMO để xem nguồn của plugin và xem liệu có một số chức năng hữu ích ở đó không. Mà bạn nên làm gì. Nhưng, AFAIK, kẻ chạy trốn hoàn toàn không đối phó git checkoutnên cơ hội của bạn rất mong manh. Có lẽ bạn sẽ cần phải quay lại :!git checkout -- filename.
romainl

Ok, cảm ơn bạn đã làm rõ. Tôi nghĩ rằng bạn đưa ra một điểm hợp lệ liên quan đến việc xem xét mã nguồn nhưng đồng thời nếu thông tin chỉ có sẵn trong mã nguồn thì đó có thể là một QA hợp lệ ở đây. Sẽ chấp nhận câu trả lời của bạn và tiếp tục sử dụng :Git checkout -- %.
tidbeck

0

Mặc dù không có gì để làm với vim, nhưng tôi nghĩ sẽ nói với bạn rằng đôi khi tôi làm:

$ git status
...
#
#   modified:   .rvmrc
#   modified:   app/views/admin/base/index.html.erb
#   modified:   config/routes.rb
#
...

$ # mouse-copy the files i want to reset, and paste them into the next command

$ cat | xargs git checkout
app/views/admin/base/index.html.erb
config/routes.rb
^D

hoàn thành công việc nhanh chóng.

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.