Q:

git での pushRemote と remote

リポジトリの、 git の config のファイルを見ていました。 branch に対する設定として、 branch.BRANCHNAME.pushRemote と branch.BRANCHNAME.remote を、別々に設定できるようになっていることに気付きました。
質問

git の branch の設定として、 pushRemote と remote の違いは何ですか?

A:

git-configによると
https://git-scm.com/docs/git-config

   branch.<name>.remote
       When on branch <name>, it tells git fetch and git push which remote
       to fetch from/push to. The remote to push to may be overridden with
       remote.pushDefault (for all branches). The remote to push to, for
       the current branch, may be further overridden by
       branch.<name>.pushRemote. If no remote is configured, or if you are
       not on any branch, it defaults to origin for fetching and
       remote.pushDefault for pushing. Additionally, .  (a period) is the
       current local repository (a dot-repository), see
       branch.<name>.merge's final note below.

   branch.<name>.pushRemote
       When on branch <name>, it overrides branch.<name>.remote for
       pushing. It also overrides remote.pushDefault for pushing from
       branch <name>. When you pull from one place (e.g. your upstream)
       and push to another place (e.g. your own publishing repository),
       you would want to set remote.pushDefault to specify the remote to
       push to for all branches, and use this option to override it for a
       specific branch.

branch.<name>.remoteはfetchとpushする際のリモートを指定(通常はこちらだけでOK)、
branch.<name>.pushRemoteの方は.remoteの値を上書きしてpushするリモート先を指定、の様です。
フォークしたリポジトリを追いかけていて、fetchはフォーク元(branch.master.remote=upstream)から取得するけど、push先はフォークした自分のリポジトリ(branch.master.pushRemote=origin)、みたいな使い方でしょうか。

追記
このオプションを知ってからフォークしたリポジトリではbranch.master.pushRemote=originを毎回個別に指定していましたが、フォークした場合のpush先は大抵自分のリポジトリ(origin)なので、グローバル設定としてremote.pushDefault=originを指定した方が楽なのかもしれないと思いました。
(フォーク元をupstream、フォーク先をoriginで管理する場合)

