Git でデフォルトのリモートを変更する方法
Git の各種コマンドでリモート名を省略したときに使用されるデフォルトのリモートを変更する方法についてです。
Git では git pull
や git push
などのコマンドにおいてリモート名を省略することができます。
$ # リモートもブランチも省略しない push の書き方
$ git pull origin master
$ # カレントブランチが master の場合は同様の処理が次のコマンドで可能
$ # (ただし origin がデフォルトのリモートに設定されている場合)
$ git pull
$ git push origin master
$ # push も同様に省略が可能
$ git push
この引数省略時に使われる「デフォルト的な位置づけのリモート」についてはブランチ単位で設定されていて、設定ファイル .git/config
の中にたとえば次のように記述されています。
[branch "develop"]
remote = origin
merge = refs/heads/develop
[branch "master"]
remote = github
merge = refs/heads/master
remote = リモート名
の部分がその設定です。
この例の場合、 develop ブランチのデフォルトリモートは origin に、 master ブランチのデフォルトリモートは github と設定されていることになります。
また、この設定は git branch
コマンドに -vv
オプションをつけて確認することもできます。
$ git branch -vv
* master (ハッシュ) [origin/master] (最新のコミットメッセージ)
[]
内に表示されているのがデフォルトとして設定されているリモート名です。
すべてのローカルブランチについて一括で確認したい場合は --all
オプションを使うといいでしょう。
$ git branch -vv --all
$ git branch -vv -a # --all は省略形の -a でも OK
Git のデフォルトのリモートの変更方法
この「デフォルトで使用されるリモート」の変更方法は大きく分けて 2 つあります。
- 変更方法 1:
git push
の-u
オプション - 変更方法 2:
git branch
のu
オプション
変更方法 1: git push
の -u
オプション
ひとつめの方法は git push
の -u
オプションを使用する方法です。
$ git push -u origin master
このコマンドを実行すると、プッシュの処理と同時に該当するブランチのデフォルトリモートが変更されます。
-u
は --set-upstream
の短縮形です。
ヘルプには次のように説明されています。
-u, --set-upstream
For every branch that is up to date or successfully pushed, add upstream (tracking)
reference, used by argument-less git-pull(1) and other commands. For more
information, see branch.<name>.merge in git-config(1).
意訳:
最新のブランチやプッシュが成功したブランチに対してアップストリームリファレンス(トラッキングリファレンス)を追加します。
これは引数なしの git-pull
などのコマンドで使用されます。
詳しくは git-config
の branch.<name>.merge
をご覧ください。
ちなみにここまで「デフォルトのリモート」「デフォルトリモート」ということばを使ってきましたが、正式な用語としては、ローカルブランチに対応するリモート(のブランチ)には「アップストリームブランチ」という名前がついています。
そのため、デフォルトのリモートを設定するためにこのように --set-upstream
というオプションを使用します。
変更方法 2: git branch
の u
オプション
もうひとつの変更方法は git branch
コマンドの -u
オプションを使用する方法です。
$ # master ブランチのデフォルトリモートを github に設定する
$ git branch -u github master
こちらの -u
オプションは --set-upstream-to
オプションの省略形です。
長い形式はじゃっかん異なりますが git push
の場合と同じアップストリームの -u
と考えて問題ないかと思います。
以上です。
ちなみに、デフォルトリモート(アップストリーム)は上述のとおり .git/config
内に書かれているので、上のやり方はどうもなぁという場合にはこのファイルを直接編集するのでもよいのではないでしょうか。
以上です。