LoginSignup
25
23

More than 5 years have passed since last update.

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

Posted at

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 指定ができたりして応用がきく。

25
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
23