1箇所コピペするだけでgitブランチ名を常に表示【.zshrc】

  • このエントリーをはてなブックマークに追加
  • Pocket

こんにちは。タクマ™ [@suwaru_blog] です。

GitHub を使い始めたばかりの駆け出しエンジニアに質問です。
このような経験をしたことありませんか?

さて、コミットも終わったし、リモートリポジトリにプッシュしよう
あれ?今のブランチ名なんだっけ…あっ新しくブランチ切ってなかった!

うーん、切ない。

ブランチを間違えて作業するとこうなる

上記ミスをしてしまうと、こんな感じの対応をすることになります。

  1. git log でやってしまったコミット ID をメモ
  2. 正しいブランチを切り直してチェックアウト
  3. 正しいブランチに git cherry-pick [コミット ID]
注意深くブランチ名を確認する習慣があれば、こんなことには…

と、思うかもですが…常に git branch でブランチ名を気にする必要はありませんよ。
zsh の設定で「常にコマンドライン上にブランチ名を表示」しておけばいいのです!

今回は git ブランチ名を常に表示する ~.zshrc の設定を紹介します!

本題に入る前に…

コマンドラインの見た目をガラっと変えることもできる Starship の導入もオススメです!
これは最初から Git のブランチ名が表示されているテーマです。

設定後の見た目

先に設定後の見た目がどうなるか紹介しておきます。
git 管理されたプロジェクトに入ると、画面右側にブランチ名が表示されます。

master ブランチで作業していることが常に分かる

ブランチ名の文字色の意味

ブランチ名の文字色には意味を持たせています。

文字色状態
全て git commit されてクリーンな状態
git commit されていないファイルがある状態
管理されていないファイルがある状態
git add されていないファイルがある状態
コンフリクトが起こった状態
上記以外の状態

この設定のメリット

  • 作業中ブランチ確認のために git branch を打たなくてよくなる
  • 現在のブランチ名が見えているので git checkout [branch] することを忘れにくい
  • 表示されているブランチ名はマウス選択で簡単にコピーできる

メリットしかないので、早めに設定しておいたほうがいいです!

設定方法

~/.zshrc を開いて、以下内容をコピペしてください。

~/.zshrc
# git ブランチ名を色付きで表示させるメソッド
function rprompt-git-current-branch {
  local branch_name st branch_status

  if [ ! -e  ".git" ]; then
    # git 管理されていないディレクトリは何も返さない
    return
  fi
  branch_name=`git rev-parse --abbrev-ref HEAD 2> /dev/null`
  st=`git status 2> /dev/null`
  if [[ -n `echo "$st" | grep "^nothing to"` ]]; then
    # 全て commit されてクリーンな状態
    branch_status="%F{green}"
  elif [[ -n `echo "$st" | grep "^Untracked files"` ]]; then
    # git 管理されていないファイルがある状態
    branch_status="%F{red}?"
  elif [[ -n `echo "$st" | grep "^Changes not staged for commit"` ]]; then
    # git add されていないファイルがある状態
    branch_status="%F{red}+"
  elif [[ -n `echo "$st" | grep "^Changes to be committed"` ]]; then
    # git commit されていないファイルがある状態
    branch_status="%F{yellow}!"
  elif [[ -n `echo "$st" | grep "^rebase in progress"` ]]; then
    # コンフリクトが起こった状態
    echo "%F{red}!(no branch)"
    return
  else
    # 上記以外の状態の場合
    branch_status="%F{blue}"
  fi
  # ブランチ名を色付きで表示する
  echo "${branch_status}[$branch_name]"
}

# プロンプトが表示されるたびにプロンプト文字列を評価、置換する
setopt prompt_subst

# プロンプトの右側にメソッドの結果を表示させる
RPROMPT='`rprompt-git-current-branch`'

Terminal を開き直して表示されるかどうか確認してみてください。

関連記事

zsh ロードマップ

zsh インストール方法

zsh 設定方法

お仕事ください!

僕が代表を務める 株式会社 EeeeG では Web 制作・システム開発・マーケティング相談を行っています。
なにかお困りごとがあれば、Twitter DM や Web サイトからお気軽にご相談ください。

コメント

  1. k2moons より:

    参考になる記事をありがとうございます。

    echo “${branch_status}[$branch_name]”

    こちらなんですが、最後に %f が抜けているように思うのですがいかがでしょう?

    1. タクマ™ より:

      私の環境では少なくとも表示できているのですが、問題ありましたでしょうか?
      不具合を確認できたら、記事を修正しようと思います。

      man zshmisc コマンドで zsh のパラメータについて確認できますが、
      %F{色番号} が文字色を指定、%f が文字色リセットの認識です。

      echo "${branch_status}[$branch_name]" は変数の参照をしているだけなので、
      ここでは %f を使わなかったのだと思います。

コメントを残す

*