Gitブランチを切り替える最も簡単な方法


21

現在、私は逃亡者を使ってgitに関連するほとんどすべてを管理していますが、利用可能なブランチをすばやく視覚化し、切り替える良いワークフローを見つけることができません。

私ができることは:Git checkout <branch-name>、問題はファイル名とブランチの両方をオートコンプリートすることであり、ブランチリストを好むことです。

回答:


12

ここで答えを得ることが、これを達成する方法です。

バニラターミナルVim

通常モードでCTRL- Zを押すと、シェルに戻り、Vimを一時停止します。タイプを実行した後、中断されたVimに戻るコマンドを実行すると、Vimも強制的に更新されます。git checkout [branchname]fg

バニラGUI Vim

一部のgvim実装には:shell、ダム端末を使用してVim内でシェルを開くサポートがあります。ただし、単に入力する方が簡単な場合があります。

:!git checkout [branchname]

これにより、新しいシェルプロンプトを開かずにコマンドが実行されます。(このオプションはターミナルVimでも使用可能です)。

逃亡者

vim-fugitiveは、Vim内からGitを使用できるプラグインです。コマンドは次のようになります。

:Git checkout [branchname]

vim-merginal

vim-merginalは、vim-fugitiveを使用するプラグインで、使いやすいインターフェイスを提供します。

  1. を入力し:Merginalます。
  2. 目的のブランチにカーソルを移動します。
  3. 入力ccして、そのブランチをチェックアウトします。

1
これfugitivefugative、ではなく、OPがすでに使用しているものです。
ムル

1
素晴らしい答え。vim-merginal私が探していたものです。
セルヒオD.マルケス

1
ctrl-zファイルが自動でロードされるため、気に入っています。同僚はコマンドライン用のtmuxウィンドウとvim用のtmuxウィンドウを持ちたいのですが、vimに戻ったときにチェックアウトまたはマージを行う場合は、開いている各ファイルにアクセスする必要があります:e!。(:bufdo e)これは覚えておくべき苦痛です。代わりに、それはに簡単ですctrl-zときにfgはVimが実行起こる:e自動魔法のように。
スキマスイッチ

Iリストに追加できる別の素敵な逃亡的拡張:github.com/sodapopcan/vim-twiggy
Sergio

gitチェックアウトが既に完了している場合、:checktime開いているすべてのバッファーをリロードするのに役立ちます。
LEI

12

使用のvim-merginalプラグイン(逃亡拡張子)。以下のインタラクティブなTUIを提供します。

  • ブランチのリストを表示する
  • そのリストからブランチをチェックアウトする
  • 新しいブランチを作成する
  • ブランチを削除する
  • ブランチをマージする
  • ブランチのリベース
  • マージの競合を解決する
  • リモートとの対話(プル、プッシュ、フェッチ、トラッキング)
  • 他のブランチとの違い
  • ブランチの名前を変更する
  • ブランチのgit履歴を表示する

ここに画像の説明を入力してください


7

端末を使用する必要があります。を使用するとCTRL-Z、Vim(または現在実行中のプロセス)がバックグラウンドになり、必要なコマンドを実行fgして、プロセスをフォアグラウンドに戻すことができます。

<CTRL-Z>
git checkout <tab>
fg

3
...そしてGVimを使用するときは?
ムル

2
:shellあなたの他の好みの端末エミュレータの中でタブ移動を行ったり、ALTするための方法です
65-e9-7e-17は

2
私はいつものように!git checkout [branchname]
bronzehedwick

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が提供する答えは非常に驚異的です。このソリューションは、想像していたよりも少ないコード行数でイメージを実装できたよりも優れています。「fzf」の強力なパーソナライゼーションの使用を理解するのに役立つドアを開きました。

私はそれを少し修正して、さらに提供します:

  1. コマンドラインの代わりに逃亡者を使用してrefを取得します(Windowsのより良いサポート)
  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') })
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.