Bagaimana saya bisa membuang perubahan file dari jendela status buron?

33

Ketika di jendela status plugin-pelarian , diakses menggunakan , dimungkinkan untuk melakukan perubahan pada file yang menggunakan dan beralih file untuk komit menggunakan .:GstatusD-

Apakah ada cara pintas serupa untuk membuang perubahan, dengan sampah yang saya maksud adalah setara git checkout -- filename?

Memperbarui:

Ditemukan permintaan fitur di halaman github buron Masalah # 97: Pintasan untuk checkout / menghapus file

Menurut itu cara yang disukai adalah menggunakan :Gread :w

Pembaruan 2:

Sejak Juni 2014 dimungkinkan menggunakan Useperti dijawab oleh Anson di bawah ini .

Pembaruan 3: Sejak 3 Jan 2019 ikatan tombol dipetakan keX

tidbeck
sumber

Jawaban:

27

Fungsi ini ditambahkan pada Juni 2014 dan secara default dipetakan ke U.

Informasi ini terletak di file bantuan di bawah :h :Gstatus:

     U     |:Git| checkout HEAD

Permintaan dan diskusi fitur:
https://github.com/tpope/vim-fugitive/issues/97

Berkomitmen:
https://github.com/tpope/vim-fugitive/commit/061a81f247538aeb61e165e1551355f289d52f63

Anson
sumber
Jika itu tidak berdokumen, itu bisa dianggap tidak aman. Tidakkah sulit mengetahui bahwa Anda mengacaukan perubahan lokal Anda karena keystroke ajaib tanpa dokumen?
lihat
2
2019 Perbarui sekarang IniX
Oguz Bilgic
siapa pun dengan hak istimewa edit, silakan mengeditnya ke X?
chriz
15

Anda dapat menggunakan buronan ‘s Greadperintah untuk mengganti isi buffer dengan berbagai versi alternatif dari file buffer (yaitu ini harus dilakukan dari buffer file, bukan dari :Gstatusbuffer).

  • :Gread(tanpa argumen) akan menggunakan versi file dari indeks .
  • :Gread - akan menggunakan versi file dari komit HEAD.

Lihat dokumentasi di :help fugitive-revisionuntuk daftar spesifikasi revisi lain yang mendukung buron (dua di atas mungkin yang paling berguna segera).

The :Greadalur kerja hasil seperti ini:

  1. :Gread
  2. buron membersihkan buffer saat ini dan membaca isi dari indeks
  3. Hasil : Buffer sekarang memiliki konten yang sama dengan indeks. File pohon kerja tidak berubah.
  4. Anda dapat menindaklanjuti dengan :wmenyimpan file ke pohon kerja (atau gunakan :Gread|wjika Anda tahu bahwa Anda akan ingin segera menyimpannya).

The :Git checkout -- %alur kerja hasil seperti ini:

  1. :Git checkout -- %
  2. Git menyalin versi file dalam indeks ke file di pohon kerja.
  3. Vim memperhatikan bahwa file telah diubah di luar editor dan meminta Anda untuk mengabaikan atau memuatnya kembali.
  4. Anda memberi tahu Vim untuk memuat ulang file.
  5. Hasil : Baik file tree kerja dan buffer sekarang memiliki konten dari indeks.

Ringkasan: :Greadmenghindari permintaan “file telah berubah sejak pengeditan dimulai” dan memungkinkan Anda memutuskan kapan Anda ingin memodifikasi file di pohon kerja.


Ketika buffer merepresentasikan tahap indeks file alih-alih file dari pohon kerja, :Greadbaca dari isi file seperti yang ada pada disk di pohon kerja bukannya tahap 0 indeks.

Chris Johnsen
sumber
Pemetaan untuk gstatus untuk mengembalikan file:au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor
1

Memetakan gstatus untuk mengembalikan file:

au FileType gitcommit nmap <buffer> U :Git checkout -- <c-r><c-g><cr>
majkinetor
sumber
ini berfungsi dengan baik, satu-satunya downside adalah bahwa saya akan mendapatkan dialog bahwa file telah berubah pada disk dan jika saya ingin memuatnya kembali. Akan lebih baik jika diam.
tidbeck
1
Itu bahkan IMO yang lebih baik ketika Anda mendapatkan konfirmasi bahwa file tersebut sebenarnya dikembalikan. Tetapi reload diam otomatis dapat dilakukan dengan opsi 'autoread' ( :help autoread). Lain maka Anda bisa bufdo eberada di dalam au.
majkinetor
0

Nah, sudahkah Anda mencoba :help fugitive?

Ternyata tidak, tidak ada jalan pintas untuk fitur Git ini.

romainl
sumber
Ya saya lakukan. Ada saat-saat saya belum menemukan fitur dalam bantuan yang telah ada. Apakah pendapat Anda bahwa Anda tidak boleh bertanya tentang fitur yang tidak membantu program / plugin?
tidbeck
Ya itu terjadi pada saya juga: ada fungsi yang saya bisa :calltetapi tidak memiliki perintah yang terkait. Saya tidak ingat nama plugin ... Align? apa pun, pendapat saya adalah bahwa seseorang harus membaca dokumen sebelum bertanya-tanya. Yang kamu lakukan. Jadi itu keren. Tetapi langkah logis kedua, setelah membaca dokumen, akan menjadi IMO untuk melihat sumber plugin dan melihat apakah ada beberapa fungsi yang berguna di sana. Yang harus Anda lakukan. Tapi, AFAIK, buron tidak berurusan git checkoutsama sekali sehingga peluang Anda tipis. Anda mungkin harus kembali ke :!git checkout -- filename.
romainl
Ok, terima kasih atas klarifikasi. Saya pikir Anda membuat poin yang valid mengenai melihat kode sumber tetapi pada saat yang sama jika informasi hanya tersedia dalam kode sumber itu bisa menjadi QA yang valid di sini. Akan menerima jawaban Anda dan terus menggunakan :Git checkout -- %.
tidbeck
0

Meskipun tidak ada hubungannya dengan vim, berpikir untuk memberitahu Anda bahwa saya kadang-kadang melakukannya:

$ 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

menyelesaikan pekerjaan dengan cepat.

Valer
sumber