Git-configのmanページには、Push.defaultの次のオプションがリストされています。
nothing - do not Push anything.
matching - Push all matching branches. All branches having the same name in both ends are considered to be matching. This is the default.
upstream - Push the current branch to its upstream branch.
tracking - deprecated synonym for upstream.
current - Push the current branch to a branch of the same name.
ほとんどの場合、ブランチの上流ブランチへのプッシュは、同じ名前のブランチへのプッシュと同じであると想定します。上流ブランチは通常同じ名前を持ち、同じ名前のブランチ(「現在」 )通常(または常に定義により?)アップストリームになります。それで、違いは何ですか?
[〜#〜] update [〜#〜]: マニュアルページgit-config が(予想どおり)更新されたため、 there の区別がより明確になりました。
質問の違いをまとめました。 upstream
はconfiguredアップストリームブランチにプッシュしますが、current
はアップストリームブランチがcurrentローカルブランチと同じ名前を持っていると想定してプッシュします特定の名前。実際には、ローカルブランチのアップストリームトラッキングブランチがローカルブランチ自体と同じ名前であると想定する理由はありません。
たとえば、複数のリポジトリで作業する場合、または多くの共有開発者リモートで作業する場合、allen-master
やsusan-master
など、同じブランチの異なるフォークを追跡することになります。どちらもmaster
それぞれ、アレンとスーザンのリポジトリにあります。この場合、current
は間違った設定になります。これらのブランチ名はリモートに存在しないためです。ただし、upstream
は正常に機能します。
より実用的な例は、development
とproduction
の両方のリポジトリを追跡することです。ワークフローはそれぞれに異なるメインラインブランチを使用する場合がありますが、混乱する可能性があります。あなたがコードインテグレータであり、両方のリポジトリのmaster
ブランチを個別に追跡したいとします。
git checkout -b production --track production/master
git checkout -b development --track development/master
これで、それぞれのリポジトリを追跡する2つのブランチがあり、どちらもmaster
命名規則をまったく使用していません。ブランチ名については少し混乱があります:彼らは追跡するものを明示的に記述します。それでも、どちらのリモートにもdevelopment
またはproduction
ブランチが含まれていないため、Push.default = current
は意味をなしません。
current
は、現在のブランチをリモートリポジトリ上の同じ名前のブランチにプッシュします。
upstream
は、現在のブランチをアップストリームブランチにプッシュします。
アップストリームブランチは、現在のブランチのアップストリームとして明示的または暗黙的に定義されているブランチです。つまり、デフォルトでプッシュとプルはこのブランチと同期します。アップストリームブランチは、現在のブランチ自体と同じリポジトリにある場合があります。 local機能(トピック)ブランチのアップストリームとしてlocal masterブランチをセットアップし、それらの間をプッシュおよびプルするなどの興味深いことを行うことができます。
暗黙のアップストリームセットアップは、branch.autosetupmerge
構成値によって行われます。ドキュメントはgit config
ヘルプページにあります。明示的なアップストリームセットアップは、-u
コマンドのgit branch
オプションを使用して行われます。詳細については、ヘルプページを参照してください。