Cara termudah untuk mengganti cabang git

21

Saat ini saya menggunakan buron untuk mengelola hampir semua yang berhubungan dengan git, tetapi saya tidak dapat menemukan alur kerja yang baik untuk dengan cepat memvisualisasikan dan beralih di antara cabang-cabang yang tersedia.

Saya bisa lakukan :Git checkout <branch-name>, masalahnya adalah ia melakukan pelengkapan otomatis baik nama file dan cabang, dan saya lebih suka daftar cabang.

Sergio D. Márquez
sumber

Jawaban:

12

Untuk memuncak jawaban di sini adalah cara untuk mencapai ini:

Terminal Vanilla Vim

Tekan CTRL- Zdalam mode normal akan mengembalikan Anda ke shell dan menangguhkan Vim. Setelah mengeksekusi git checkout [branchname]ketik Anda fgperintah untuk kembali ke Vim yang ditangguhkan yang juga akan memaksa Vim untuk menyegarkan.

Vanilla GUI Vim

Beberapa implementasi gvim akan memiliki :shelldukungan yang akan membuka shell di dalam Vim menggunakan terminal bisu. Namun mungkin lebih mudah untuk mengetik:

:!git checkout [branchname]

Ini akan menjalankan perintah tanpa harus membuka prompt shell baru. (Opsi ini juga dapat digunakan di terminal Vim).

buron-vim

vim-fugitive adalah sebuah plugin yang memungkinkan Anda untuk menggunakan Git dari dalam Vim. Perintahnya adalah:

:Git checkout [branchname]

vim-merginal

vim-merginal adalah plugin yang menggunakan vim-fugitive dan menyediakan antarmuka yang ramah-pengguna.

  1. Jenis :Merginal.
  2. Pindahkan kursor ke cabang yang Anda inginkan.
  3. Ketik ccuntuk memeriksa cabang itu.
Sukima
sumber
1
Ini fugitive, tidak fugative, dan bahwa itu apa OP sudah menggunakan.
muru
1
Jawaban yang luar biasa. vim-merginaladalah apa yang saya cari.
Sergio D. Márquez
1
Saya suka ctrl-zkarena secara otomatis memuat file. Rekan kerja suka memiliki jendela tmux untuk baris perintah dan satu untuk vim tetapi ketika mereka melakukan checkout atau bergabung ketika mereka kembali ke vim mereka harus pergi ke setiap file yang terbuka dan :e!setiap waktu. ( :bufdo e) yang merupakan rasa sakit untuk diingat. Alih-alih, lebih mudah untuk melakukan ctrl-zitu ketika fgVim melakukan :eauto-ajaib.
Sukima
Saya ekstensi buron bagus lainnya yang dapat Anda tambahkan ke daftar: github.com/sodapopcan/vim-twiggy
Sergio D. Márquez
Jika checkout git sudah dilakukan, :checktimeberguna untuk memuat ulang semua buffer yang dibuka.
LEI
12

Gunakan plugin vim-merginal ( ekstensi buron ). Menawarkan TUI interaktif untuk:

  • Melihat daftar cabang
  • Memeriksa cabang dari daftar itu
  • Membuat cabang baru
  • Menghapus cabang
  • Menggabungkan cabang
  • Cabang rebasing
  • Memecahkan konflik gabungan
  • Berinteraksi dengan remote (menarik, mendorong, mengambil, melacak)
  • Berbeda dengan cabang lainnya
  • Mengganti nama cabang
  • Melihat riwayat git untuk cabang

masukkan deskripsi gambar di sini

adelarsq
sumber
7

Anda harus merangkul terminal Anda. Jika Anda menggunakan CTRL-Z, itu akan latar belakang Vim (atau proses apa pun yang sedang Anda jalankan), maka Anda dapat menjalankan perintah yang Anda inginkan, fguntuk membawa proses kembali ke latar depan:

<CTRL-Z>
git checkout <tab>
fg
65-e9-7e-17
sumber
3
... dan saat menggunakan GVim?
muru
2
:shelladalah cara untuk pergi atau alt menabrak ke emulator terminal favorit Anda lainnya
65-e9-7e-17
2
Saya selalu suka!git checkout [branchname]
bronzehedwick
5

Buronan Git checkout <branch>memiliki kelemahan yang tidak melengkapi nama cabang secara otomatis. Menggunakan fzf.vim saya telah membuat perintah ini:

function! s:changebranch(branch) 
    execute 'Git checkout' . a:branch
    call feedkeys("i")
endfunction

command! -bang Gbranch call fzf#run({
            \ 'source': 'git branch -a --no-color | grep -v "^\* " ', 
            \ 'sink': function('s:changebranch')
            \ })

semoga bermanfaat

kubek2k
sumber
1

Jawaban yang diberikan oleh @ kubek2k sangat fenomenal. Solusi itu lebih baik daripada yang bisa saya bayangkan dan terapkan dalam lebih sedikit baris kode yang bisa saya gambar. Itu membuka pintu untuk membantu saya memahami penggunaan personalisasi 'fzf' yang kuat.

Saya telah sedikit memodifikasinya untuk memberikan:

  1. Menggunakan buron untuk mendapatkan referensi alih-alih baris perintah, (dukungan yang lebih baik untuk windows)
  2. Daftar tag bersama dengan cabang

Berikut ini sedikit modifikasi:

function! s:gitCheckoutRef(ref) 
    execute('Git checkout ' . a:ref)
    " call feedkeys("i")
endfunction
function! s:gitListRefs()
   let l:refs = execute("Git for-each-ref --format='\\%(refname:short)'")
   return split(l:refs,'\r\n*')[1:] "jump past the first line which is the git command
endfunction
command! -bang Gbranch call fzf#run({ 'source': s:gitListRefs(), 'sink': function('s:gitCheckoutRef'), 'dir':expand('%:p:h') })
Radke
sumber