Gitの小ネタおれおれAdvent Calendar 2022 – 12 日目

気が付くとブランチがいっぱいになってたりしますがマージ済みのブランチだけ表示することができます。

マージ済みブランチを表示

git branch でブランチ一覧が出てきますが --merged オプションを与えると今いるコミット位置に連なるブランチだけに絞り込んで表示することができます。

今いるブランチも含まれている点に注意。

$ git branch --merged
  anotherFeature
  greatFeature
* main

以下 git branch --help より。

–merged [<commit>]

Only list branches whose tips are reachable from the specified commit (HEAD if not specified). Implies --list, incompatible with --no-merged.

削除

こう。

$ git branch --delete $(git branch --no-color --merged | grep -v "*" | tr "\n" " ")
Deleted branch anotherFeature (was db7d011).
Deleted branch greatFeature (was 7317aad).

順に説明します。

$(…) で実行結果を渡す

JavaScript の `Hello ${name}` みたいなやつです。

パイプ | で繋げられなかったのでこっち使て埋め込みました。

--no-color

なんか制御文字あってこんな↓エラー出たんで除きます。色をリセットするやつ \e[m だな。

error: branch 'greatFeature?[m' not found.

今いるブランチを除く

例えば master にいるときは必ずそれが一覧に出てきちゃうんだけどそれは削除できないので、除く必要があります。

Git 側では特にできなさそうなので、別途 grep へ渡します。(Windows だと動かない気がします。) -v あるいは --invert-match でマッチしないものになります。

$ git b --merged | grep -v "*"
  greatFeature
  anotherFeature

tr で一行にまとめる

前節と同じく別途 tr (translate) へ渡します。改行文字 "\n" を空白 " " へ置換しています。

$ git branch --merged | tr "\n" " "
  greatFeature * main $

リモートブランチも表示

--remote--all でサーバー側のブランチが出てきます。--merged と併用できますが、その場合先に指定する必要があります。

だめな例。

$ git branch --merged --all
fatal: malformed object name --all

大丈夫な例。

$ git branch --all --merged 
  greatFeature
* main
  remotes/origin/main

おしまい

こんな風にやりたい。(できない。)

$ git branch --delete --merged