Git şubelerini değiştirmenin en kolay yolu


21

Şu anda git ilgili her şeyi yönetmek için kaçak kullanıyorum, ancak hızlı bir şekilde görselleştirmek ve mevcut şubeler arasında geçiş yapmak için iyi bir iş akışı bulamıyorum.

Yapabilirim :Git checkout <branch-name>, sorun hem dosya adlarını hem de dalları otomatik olarak tamamlamasıdır ve bir dal listesini tercih ederim.

Yanıtlar:


12

Buradaki cevapları zirveye çıkarmak, bunu başarmanın yollarıdır:

Vanilya Terminali Vim

CTRL- Z- normal modda tuşuna bastığınızda kabuğa geri dönersiniz ve Vim'i askıya alırsınız. Türünüzü yürüttükten sonra git checkout [branchname], fgVim'i yenilemeye zorlayacak askıya alınmış Vim'e geri dönme komutu.

Vanilya GUI Vim

Bazı gvim uygulamaları, :shellaptal bir terminal kullanarak Vim'in içine bir kabuk açacak olan desteğe sahip olacak. Ancak, sadece yazmak daha kolay olabilir:

:!git checkout [branchname]

Bu, yeni bir kabuk bilgi istemi açmak zorunda kalmadan komutu yürütecektir. (Bu seçenek Vim terminalinde de kullanılabilir).

vim-kaçak

vim-fugitive , Git'i Vim içinden kullanmanıza izin veren bir eklentidir. Komut şöyle olurdu:

:Git checkout [branchname]

vim-merginal

vim-merginal , vim-kaçak kullanan ve kullanıcı dostu bir arayüz sağlayan bir eklentidir .

  1. Yazın :Merginal.
  2. İmleci istediğiniz şubeye getirin.
  3. Tip ccbu kolu kontrol etmek.

1
Bu fugitivedeğil fugative, ve OP zaten kullandığı şey.
muru

1
Müthiş cevap. vim-merginalaradığım şey buydu.
Sergio D. Márquez,

1
ctrl-zDosyaları otomatik yüklediği için hoşuma gitti . İş arkadaşları komut satırı için bir tane ve bir tane de vim için bir pencereye sahip olmak ister, ancak vim'e geri döndüklerinde bir ödeme veya birleştirme yaptıklarında, her açık dosyaya ve :e!her seferinde gitmeleri gerekir . ( :bufdo e) hatırlanması gereken bir acı. Bunun yerine daha kolaydır ctrl-zsonra zaman fgVim gerçekleştirir olur :eotomatik sihirli.
Sukima

Ben listeye eklemek olabilir başka güzel kaçak uzantısı: github.com/sodapopcan/vim-twiggy
Sergio D. Márquez

Git ödeme zaten yapıldıysa, :checktimeaçılan tüm tamponları yeniden yüklemek için kullanışlıdır.
LEI

12

Vim-merginal eklentiyi kullanın ( kaçak uzatma). Aşağıdakiler için etkileşimli TUI sunar:

  • Şube listesini görüntüleme
  • Bu listedeki şubelere bakma
  • Yeni dallar oluşturmak
  • Dalları silme
  • Dalları birleştirmek
  • Dalları yeniden düzenleme
  • Birleştirme çakışmalarını çözme
  • Uzaktan kumandalarla etkileşim kurma (çekme, zorlama, alma, izleme)
  • Diğer dallara karşı dağılma
  • Dalları yeniden adlandırma
  • Şubeler için git geçmişini görüntüleme

görüntü tanımını buraya girin


7

Terminalini kucaklamalısın. CTRL-ZKullanırsanız, Vim'i (veya şu anda hangi işlemi çalıştırıyorsanız) arka planını kullanır , ardından fgişlemi geri ön plana çıkarmak için istediğiniz herhangi bir komutu çalıştırabilirsiniz :

<CTRL-Z>
git checkout <tab>
fg

3
... ve GVim kullanırken?
muru

2
:shelldiğer favori terminal emülatörü için gitmek yolu veya alt sekme olan
65-e9-7e-17

2
Her zaman seviyorum!git checkout [branchname]
bronzehedwick

5

Kaçak Git checkout <branch>, dal adını otomatik olarak tamamlamamasının bir dezavantajına sahip. Fzf.vim kullanarak bu komutu oluşturdum:

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')
            \ })

umarım yararlı bulursunuz


1

@ Kubek2k tarafından verilen cevap çok olağanüstü. Bu çözüm, görüntüleyebileceğim daha az kod satırında hayal edebileceğim ve uygulayabileceğimden daha iyi. 'Fzf'nin güçlü kişiselleştirme kullanımını anlamama yardımcı olmak için kapıyı açtı.

Ek olarak sağlamak için hafifçe değiştirdim:

  1. Komut satırı yerine referansları almak için kaçak kullanımı yapar (pencereler için daha iyi destek)
  2. Dalları ile birlikte etiketleri listeleme

İşte küçük değişiklik:

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') })
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.