गिट शाखाओं को स्विच करने का सबसे आसान तरीका


21

अभी मैं लगभग हर चीज से संबंधित प्रबंधन करने के लिए भगोड़े का उपयोग कर रहा हूं, लेकिन मैं उपलब्ध शाखाओं के बीच जल्दी से कल्पना और स्विच करने के लिए एक अच्छा वर्कफ़्लो नहीं पा सकता हूं।

मैं कर सकता हूँ :Git checkout <branch-name>, समस्या यह है कि यह फ़ाइल नाम और शाखाओं दोनों को स्वतः पूर्ण करता है, और मैं एक शाखा सूची पसंद करूंगा।

जवाबों:


12

इसका जवाब देने के तरीके यहां दिए गए हैं:

वेनिला टर्मिनल विम

प्रेस CTRL- सामान्य मोड Zमें आप वापस शेल में छोड़ देंगे और विम को निलंबित कर देंगे। निलंबित विम पर लौटने के लिए अपने प्रकार को निष्पादित करने के बाद जो विम को ताज़ा करने के लिए भी मजबूर करेगा।git checkout [branchname]fg

वेनिला जीयूआई विम

कुछ gvim कार्यान्वयन में :shellसमर्थन होगा जो Vumb के अंदर एक डंब टर्मिनल का उपयोग करके खोल देगा। हालांकि यह सिर्फ टाइप करने के लिए आसान हो सकता है:

:!git checkout [branchname]

यह एक नया शेल प्रॉम्प्ट खोले बिना कमांड निष्पादित करेगा। (यह विकल्प टर्मिनल विम में भी प्रयोग करने योग्य है)।

vim-भगोड़ा

vim-fugitive एक प्लगइन है जो आपको Vim के भीतर से Git का उपयोग करने की अनुमति देता है। आदेश होगा:

:Git checkout [branchname]

vim-merginal

vim-merginal एक प्लगइन है जो vim-fugitive का उपयोग करता है और एक उपयोगकर्ता के अनुकूल- ish इंटरफ़ेस प्रदान करता है।

  1. टाइप करें :Merginal
  2. अपनी इच्छित शाखा में कर्सर ले जाएँ।
  3. ccउस शाखा की जाँच करने के लिए टाइप करें।

1
यह fugitive, नहीं है fugative, और यही ओपी पहले से ही उपयोग कर रहा है।
मूरू

1
बहुत बढ़िया जवाब। vim-merginalजिसकी मुझे तलाश थी वह है।
सर्जियो डी। मर्कज़

1
मुझे पसंद है ctrl-zक्योंकि यह ऑटो फाइलों को लोड करता है। सहकर्मियों को कमांड लाइन के लिए एक tmux विंडो और एक vim के लिए पसंद है, लेकिन जब वे एक चेकआउट करते हैं या विलय करते हैं जब वे vim पर लौटते हैं तो उन्हें प्रत्येक खुली फ़ाइल और :e!हर बार जाना पड़ता है । ( :bufdo e) जो याद करने के लिए एक दर्द है। इसके बजाय यह ctrl-zतब आसान fgहोता है जब विम :eऑटो-जादुई रूप से प्रदर्शन करता है ।
सुकिमा

मैं एक और अच्छा भगोड़ा विस्तार आप इस सूची में जोड़ सकते हैं: github.com/sodapopcan/vim-twiggy
सर्जियो डी। मर्कज़

यदि पहले ही गिट चेकआउट किया जाता है, तो :checktimeसभी खोले गए बफ़र्स को फिर से लोड करने के लिए काम आता है।
LEI

12

का प्रयोग करें vim-merginal प्लगइन ( भगोड़ा विस्तार)। यह इसके लिए इंटरैक्टिव TUI प्रदान करता है:

  • शाखाओं की सूची देखना
  • उस सूची से शाखाओं की जाँच करना
  • नई शाखाएँ बनाना
  • शाखाओं को हटाना
  • शाखाओं को मिलाना
  • रिबासिंग शाखाएँ
  • मर्ज को हल करने के लिए विरोध
  • रीमोट (खींचना, धक्का देना, लाना, ट्रैक करना) के साथ बातचीत करना
  • अन्य शाखाओं के खिलाफ मुश्किल
  • शाखाओं का नाम बदलना
  • शाखाओं के लिए इतिहास को देखना

यहाँ छवि विवरण दर्ज करें


7

आपको अपने टर्मिनल को गले लगाना चाहिए। यदि आप उपयोग करते हैं CTRL-Z, तो यह विम (या जो भी प्रक्रिया आप वर्तमान में चला रहे हैं) को पृष्ठभूमि देंगे, फिर आप fgइस प्रक्रिया को अग्रभूमि में लाने के लिए अपनी इच्छानुसार कोई भी कमांड चला सकते हैं :

<CTRL-Z>
git checkout <tab>
fg

3
... और GVim का उपयोग करते समय?
मूरू

2
:shellजाने के लिए या अपने अन्य पसंदीदा टर्मिनल एमुलेटर पर जाने के लिए सबसे अच्छा तरीका है
65- e9-7e-17

2
मुझे हमेशा पसंद है!git checkout [branchname]
ब्रोंज़ेहेडविक

5

भगोड़े Git checkout <branch>में एक नकारात्मक पहलू यह है कि यह शाखा नाम को स्वत: पूर्ण नहीं करता है। Fzf.vim का उपयोग करके मैंने यह कमांड बनाया है:

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

उम्मीद है यह आपको उपयोगी होगा


1

@ Kubek2k द्वारा प्रदान किया गया उत्तर इतना अभूतपूर्व है। उस समाधान से बेहतर है जिसकी मैं कल्पना कर सकता हूं और कोड की कम पंक्तियों में लागू किया जा सकता है जो कि मैं imaged कर सकता था। इसने 'fzf' के शक्तिशाली निजीकरण उपयोग को समझने में मेरी मदद करने के लिए दरवाजा खोला।

मैंने इसे अतिरिक्त रूप से प्रदान करने के लिए थोड़ा संशोधित किया है:

  1. कमांड लाइन के बजाय रेफरी प्राप्त करने के लिए भगोड़े का उपयोग करता है, (विंडोज़ के लिए बेहतर समर्थन)
  2. शाखाओं के साथ सूची टैग करें

यहाँ मामूली संशोधन है:

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') })
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.