👋

Gitの現在のブランチをプロンプトに表示するBash設定

2025/02/10に公開

はじめに

ターミナルで作業をしていると、どのブランチで作業しているのかを確認することがあるかと思います。
プロンプトに現在のブランチ名と作業状態を表示する方法をまとめましたので、紹介します。

設定方法

1. git-prompt.shをダウンロード

Gitには、プロンプトをカスタマイズするためのスクリプトが用意されています。
.bashrcがあるディレクトリで以下のコマンドを実行し、スクリプトをダウンロードしてください。

wget https://raw.githubusercontent.com/git/git/master/contrib/completion/git-prompt.sh

2. .bashrc に設定を追加

以下の内容を ~/.bashrcに追記してください。

source ~/.git-prompt.sh

PROMPT_COMMAND='PS1="\[\033[1;32m\]\u\[\033[00m\]:\[\033[1;34m\]\w\[\033[1;31m\]$(__git_ps1)\[\033[00m\] \$ "'

3. 変更を反映

変更を反映するには、以下のコマンドを実行します。

source ~/.bashrc

この設定だと、以下のように表示されます。

user@host:~/repo (main) $

続いて、PS1の各要素について詳しく説明します。


🔧PS1 の設定について

PS1とは、プロンプトをどのようにフォーマットして表示するかを定義する変数です。

🏷️ 各要素の意味

コード 意味 表示される内容
\u ユーザー名 user
\w カレントディレクトリ ~/myproject
$(__git_ps1) Gitブランチ情報 (main), (feature-branch) など
\$ ユーザー権限を示す 一般ユーザ: $, rootユーザ: #

🎨 色設定 (\033[XXm)

この設定では、ユーザー名・カレントディレクトリ・Gitブランチ名 に色を付けています。

コード 適用範囲
\[\033[1;32m\] ユーザー名 (\u)
\[\033[1;34m\] カレントディレクトリ (\w)
\[\033[1;31m\] Git ブランチ ($(__git_ps1))
\[\033[00m\] デフォルト色に戻す 次の文字に色が影響しないようリセット

PS1のフォーマットにはさまざまなオプションがあり、ここでは詳細を省略します。
興味がある方は、ぜひ調べてみてください(「bash PS1 カスタマイズ」などで検索すると情報が見つかります)。


3. Gitの状態をプロンプトに表示する

必須ではないですが、上記の設定に加え、以下の定数を追記することで、Gitの作業状態をプロンプトに表示できます。

GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWUPSTREAM="auto"
GIT_PS1_STATESEPARATOR="|"
GIT_PS1_SHOWCOLORHINTS=yes
GIT_PS1_SHOWCONFLICTSTATE=yes
GIT_PS1_HIDE_IF_PWD_IGNORED=yes

🔧git-prompt.shで使用できる定数一覧

定数 説明 設定値 設定しない場合のデフォルト動作
GIT_PS1_SHOWDIRTYSTATE ワークツリーの変更状態 (*, +) を表示 1(有効) 変更状態を表示しない
GIT_PS1_SHOWSTASHSTATE git stashされた変更の有無を表示 1(有効) git stash の情報を表示しない
GIT_PS1_SHOWUNTRACKEDFILES 未追跡ファイル (%) を表示 1(有効) 未追跡ファイルを表示しない
GIT_PS1_SHOWUPSTREAM リモートとの差分 (<, >, <>, =) を表示 "auto", "verbose" リモートとの差分を表示しない
GIT_PS1_STATESEPARATOR 状態を区切る記号を変更 "|", " / " など スペースで区切られる
GIT_PS1_SHOWCOLORHINTS Gitのブランチ名や状態を色付きで表示 yes(有効) 色なしのプレーンな表示(PS1で色を指定している場合は、その色になります)
GIT_PS1_SHOWCONFLICTSTATE CONFLICTを表示 yes(有効) コンフリクトの情報を表示しない
GIT_PS1_HIDE_IF_PWD_IGNORED .gitignoreで無視されている場合、Git情報を非表示にする yes(有効) .gitignoreに関係なくGit情報を表示

📌GIT_PS1_SHOWDIRTYSTATE
ワークツリーに変更がある場合、その状態をプロンプトに表示します。
有効にする場合は、1を設定します。

  • * → 未ステージングの変更あり
  • + → ステージング済みの変更あり

表示例:

user@host:~/repo (main *) $
user@host:~/repo (main *+) $

📌GIT_PS1_SHOWSTASHSTATE
git stash に保存されている変更がある場合、$を表示します。

表示例:

user@host:~/repo (main $) $

📌GIT_PS1_SHOWUNTRACKEDFILES
未追跡のファイルが存在する場合、%を表示します。

表示例:

user@host:~/repo (main%) $

📌GIT_PS1_SHOWUPSTREAM
リモートとの差分を示します。

  • < → リモートより遅れている
  • > → リモートより進んでいる
  • <> → ローカルとリモートが分岐している
  • = → ローカルとリモートが一致している

表示例(設定値をautoにした場合):

user@host:~/repo (main <) $  # リモートより遅れている
user@host:~/repo (main >) $  # リモートより進んでいる
user@host:~/repo (main <>) $ # リモートとローカルで異なるコミットを持っている
user@host:~/repo (main =) $  # リモートと一致している

GIT_PS1_SHOWUPSTREAMの設定値についてですが、基本的にはautoにしておけば問題ありません。
より詳細な設定(verbosename など)については、別記事で解説予定です。


📌GIT_PS1_SHOWSTASHSTATE
git stash に保存されている変更がある場合、$を表示します。

表示例:

user@host:~/repo (main $) $

📌GIT_PS1_STATESEPARATOR
状態を区切る記号を "|""/"などに変更できます(デフォルトはスペース)。

表示例(設定値を"|"にした場合):

user@host:~/repo (main|+) $

📌GIT_PS1_SHOWCOLORHINTS

Gitのブランチ名や状態情報を、Bashのカラースキームに基づいて色付きで表示します。
例えば、ブランチ名は緑、変更のある場合は赤、リモートとの差分がある場合は黄色など、直感的に状況が分かりやすくなります。

PS1でも色を指定できますが、両方を設定した場合、GIT_PS1_SHOWCOLORHINTSの方が優先されます。


📌GIT_PS1_SHOWCONFLICTSTATE

未解決のコンフリクトがある場合、CONFLICT を表示します。

表示例:

user@host:~/repo (main CONFLICT) $

📌GIT_PS1_HIDE_IF_PWD_IGNORED
現在のディレクトリが .gitignoreにより無視されている場合、プロンプトにGit情報を表示しないようにします。
これは、不要なディレクトリでのGit情報表示を防ぐのに役立ちます。

有効化後の動作:

  • .gitignoreに無視されているディレクトリでは、Gitブランチや状態が表示されなくなる
  • .gitignoreの対象外のディレクトリでは、通常通りGit情報が表示される

まとめ

  • git-prompt.shを使うと プロンプトに現在のブランチと作業状況を表示 できる。
  • .bashrc に設定を追加するだけで簡単に導入可能。

Discussion