みなさんgit操作をコマンドで行っていますか?コマンド勢の方ならpush --set-upstream
を一度は見たことありませんか?.gitで新しいブランチを作成してgit push
を実行すると,次のようなメッセージが表示されることがある.
git push fatal: The current branch feature/sample has no upstream branch. To push the current branch and set the remote as upstream, use
git push --set-upstream origin feature/sample
これは,現在のブランチに対応するリモートブランチが存在しないため,手動でgit push --set-upstream origin <branch>
を実行してローカルブランチに対応するリモートブランチを設定するように促している.
一度git push --set-upstream origin <branch>
をすれば,次回以降のgit push
は通常通り動作するが,新しいブランチを作成するたびに同じ手順を踏むのは面倒だ.そこで,この設定を自動化する方法を紹介する.
gitがわからない方は以下の記事を参照してください.
push.default
の設定を確認する
Gitには,デフォルトのpush動作を制御するpush.default
という設定がある.これを変更することで,git push --set-upstream
を手動で実行する必要がなくなる.
まず,現在の設定を確認する.
git config --global push.default
この状態はsimple
と呼ばれる状態で,リモート追跡ブランチが設定されていることを前提とし,リモートのブランチ名とローカルのブランチ名が異なる場合に警告を出す設定だ.
push.default
の設定を変更する
push.default
をcurrent
に設定する.
git config --global push.default current
この設定を行うことで,git push
を実行した際に現在のローカルブランチと同じ名前のブランチがリモートに存在すれば,そのブランチにpushする.もし存在しなければ,新しく作成してpushする.
push.default
の設定値の種類
push.default
にはいくつかのモードがある.それぞれの動作は次の通り.
-
nothing
デフォルトではpushを行わず,明示的に指定されたブランチのみをpushする -
current
現在のローカルブランチをリモートブランチにpushする(リモートに存在しなければ作成する) -
upstream
現在のローカルブランチのupstream
(追跡)ブランチが設定されていれば,そのブランチにpushする -
simple
(Git 2.0以降のデフォルト)
upstream
に似ているが,現在のブランチ名とリモートのブランチ名が一致する場合のみpushを許可する -
matching
ローカルとリモートで同じ名前のブランチすべてをpushする
この中でも,current
が最も直感的で便利な設定だ.特に個人での開発では,新しいブランチを作成してそのままpushすることが多いため,git push --set-upstream
を省略できるのは大きな利点になる.