Git CLIで checkout
や switch
を利用する際に、ブランチ名をタブ補完で入力する方も多いと思います。
しかし、git の補完のデフォルトの挙動では、リモートリポジトリ上のブランチも含まれるため、タブを押すたびに大量の候補が表示されてしまうのが煩わしいと感じていました。
そこで補完候補をローカルブランチのみにする方法を探したところ、意外と簡単にできたため記事に残します。
(タブ補完の設定自体は他に様々な記事で説明されているため割愛します)
結論
環境変数に以下を追加する
GIT_COMPLETION_CHECKOUT_NO_GUESS=1
この設定はGit の補完スクリプトである git-completion.bash
のソースコードにコメントとして記載がありました。
結構重要な情報だと思うのですが、公式ドキュメントなど目立つところのでの記載は発見できませんでした。
git-completion.bash
を利用している限り多くの環境で動作するのではないかと思います。
(筆者の環境はmac×zshですが、内部的にはgit-completion.bash
が利用されているようで、問題なく動作しました。)
その他の補完関連オプション
ソースコードのコメントには他にもいくつかのオプションが記載されていたので、ついでにそちらも紹介します。
1. GIT_COMPLETION_SHOW_ALL_COMMANDS=1
通常は隠されているコマンドも候補に含まれるようになります。
例えば、ソースコードのコメントでは cat-file
などのコマンドが表示される例として挙げられています。
2. GIT_COMPLETION_SHOW_ALL=1
通常は表示されないオプションも補完候補になります。
例えば、git commit
の際の--allow-empty
などのオプションが表示されるようになるとのことです。
3. GIT_COMPLETION_IGNORE_CASE=1
補完時に大文字小文字が区別されないようになります。
例えば FOO
ブランチに切り替えたい時に、git switch f<TAB>
と打つと FOO
を補完してくれます。
まとめ
筆者の開発チームでは命名規則上、ブランチ名が大文字から始まることが多く、特にGIT_COMPLETION_IGNORE_CASE
が便利に感じました。シフトキーを押す必要がなくなるだけで、ちょっとしたストレスから解放されます。
良い Git ライフを!