Git でローカルブランチを違う名前のリモートブランチにプッシュする方法


ローカルの master ブランチをリモートにプッシュする場合, プッシュ先のリモートブランチの名前は通常ローカルブランチの名前と同名の master ですが, master 以外のリモートブランチにプッシュする方法を紹介します.

同名のリモートブランチにプッシュする場合

まず, ローカルの master ブランチをリモート (origin) の master ブランチにプッシュする場合, 次のようになります:

git push origin master

別名のリモートブランチにプッシュする場合

もしそのように同名のリモート master ブランチにプッシュするのではなく, 別名のリモートブランチに, 例えば gh-pages ブランチにプッシュする場合, 次のコマンドでそのようにすることができます:

git push origin master:gh-pages

master:gh-pages の部分がポイントで, その部分は <src>:<dest> と解釈され, <src> (ソース) であるローカルの master ブランチを <dest> (デスティネーション) であるリモートの gh-pages にプッシュするという意味になります.

リジェクトされた場合

もしリモートの gh-pages ブランチが既に存在していて, ローカルの master ブランチをプッシュしてもそのままファストフォワードとならない場合, 次のようなエラーが表示されます:

 ! [rejected]        master -> gh-pages (non-fast-forward)

なのでそのような場合, リモートの gh-pages をローカルの master にプルしてからあらためてプッシュするか:

git pull origin gh-pages
git push origin master:gh-pages

-f (--force) オプションを加えて, 強制的にローカルの master ブランチでリモートの gh-pages ブランチのコミットヒストリを書き換えてプッシュする方法があります:

git push -f origin master:gh-pages

ただ -f オプションは, 破壊的なオプションなので, 他の人と一緒にコラボレートしているレポジトリで使用するのは, 例外的な状況を除いて控えるべきとされています.

まとめ

もしローカルのブランチを違う名前のリモートブランチにプッシュする場合は, git push origin master:gh-pages のように git push <repository> <src>:<dest> というシンタックスで可能です.