Git でデフォルトのリモートを変更する方法

Git の各種コマンドでリモート名を省略したときに使用されるデフォルトのリモートを変更する方法についてです。

Git では git pullgit 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 branchu オプション

変更方法 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-configbranch.<name>.merge をご覧ください。

ちなみにここまで「デフォルトのリモート」「デフォルトリモート」ということばを使ってきましたが、正式な用語としては、ローカルブランチに対応するリモート(のブランチ)には「アップストリームブランチ」という名前がついています。 そのため、デフォルトのリモートを設定するためにこのように --set-upstream というオプションを使用します。

変更方法 2: git branchu オプション

もうひとつの変更方法は git branch コマンドの -u オプションを使用する方法です。

$ # master ブランチのデフォルトリモートを github に設定する
$ git branch -u github master

こちらの -u オプションは --set-upstream-to オプションの省略形です。 長い形式はじゃっかん異なりますが git push の場合と同じアップストリームの -u と考えて問題ないかと思います。

以上です。

ちなみに、デフォルトリモート(アップストリーム)は上述のとおり .git/config 内に書かれているので、上のやり方はどうもなぁという場合にはこのファイルを直接編集するのでもよいのではないでしょうか。

以上です。