git ですべてのブランチに対して処理を行う方法

  • 23
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

git-svn を使っているとき、すべてのブランチに対して git svn rebase をしたいと思った。

方法1

以下のコマンドで、ブランチのリストを取得できる。

git for-each-ref --format='%(refname:short)' refs/heads

これを使ってシェルスクリプトを書くことができる。

git svn fetch
for branch in $(git for-each-ref --format='%(refname:short)' refs/heads); do
    git checkout $branch && git svn rebase --local
done

方法2

git for-each-ref の出力をパイプで直接 sh に渡してしまう方法もある。

git svn fetch
git for-each-ref --format='git checkout %(refname:short) && git svn rebase --local' refs/heads | sh

補足

ブランチのリストを取得して何か処理する、といった場合は、git branch でなく git for-each-ref を使うほうがいいようだ。

git branch は hidh-level commands (porcelain) であり、シェル上で対話的に使うことを想定している。だから、現在のブランチにマークがついていたりする。

git for-each-ref は low-level commands (plumbing) であり、スクリプトで使うのに向いている。だから、普段シェル上でコマンドを打つときはちょっと使いにくいけど、format 指定ができたりして応用がきく。