Bagaimana cara checkout file dari komit lain di Magit

16

Saya punya file foo.txtdi cabang A, dan saya ingin memeriksa foo.txtdari cabang Bke dalam indeks. Di baris perintah, saya akan melakukan ini:

$ git checkout B -- foo.txt

Saya ingin dapat melakukan ini di magit dengan masuk ke log, menemukan komit yang saya tertarik (misalnya l o B), menemukan foo.txt, dan menjalankan beberapa perintah, tetapi saya tidak tahu bagaimana melakukannya.

Emosis
sumber
Ini sekarang permintaan fitur github.com/magit/magit/issues/2184 . Terima kasih telah melihatnya, pengelola
Emoses

Jawaban:

21

Pada magit 2.11.0 ini dimungkinkan secara langsung dari dispatcher reset ( X fdan Anda dapat menentukan revisi dan file):

masukkan deskripsi gambar di sini

Ini dapat dilakukan secara terprogram dalam penggunaan magit magit-file-checkoutyang menerima spesifikasi versi dan nama file (berkat permintaan fitur @Emoses 'dan implementasi @Kyle Meyer). Sebelumnya fungsinya dinamai magit-checkout-file(from v2.3.0 - v2.9.0).

Epa
sumber
4
magit-checkout-filesekarang sudah usang. Gunakan magit-file-checkoutsebagai gantinya.
Sagar Jha
3

Saya tidak mengetahui cara builtin untuk melakukan ini.

Dengan asumsi Anda berada di cabang A, pendekatan lain adalah dengan diff cabang B ( d r ..B), dan kemudian pindahkan titik ke file yang Anda minati. Menekan aakan menerapkan perubahan tersebut ke pohon kerja (bukan indeks).

Saya memiliki perintah dalam konfigurasi saya untuk mengatur ulang atau checkout file dari revisi, tetapi, dalam kondisi saat ini, itu tidak sesuai persis dengan apa yang Anda minta karena itu tidak akan menawarkan standar revisi yang baik ketika di Magit Revision mode.

(defun km/magit-reset-file (rev file &optional checkout)
  "Reset FILE from revision REV.

If prefix argument CHECKOUT is non-nil, checkout FILE from REV
instead.

\(git reset REV -- FILE)
\(git checkout REV -- FILE)"
  (interactive
   (let ((rev (magit-read-branch-or-commit "Revision")))
     (list rev (magit-read-file-from-rev rev "File") current-prefix-arg)))
  (magit-with-toplevel
    (magit-run-git (if checkout "checkout" "reset")
                   rev "--" file)))
Kyle Meyer
sumber