最初に、git push
は2つの引数を追加したいとしていますが、それらを指定しないと自動的に作成されます。したがって、基本コマンドはgit push remoterefspec
です。
remote
の部分はほとんどの場合、常に単語origin
であるため、些細なことです。よりトリッキーな部分はrefspec
です。最も一般的には、人々はここにブランチ名を書きます:git push origin master
、例えば。これはローカルブランチを使用してリモートの同じ名前ののブランチにプッシュし、必要に応じて作成します。しかし、それはのちょうどのブランチ名である必要はありません。
特に、refspec
には、2つのコロンで区切られた部分があります。 git push
の場合、左側の部分はとなります。、、右側の部分はとなります。の名前です。この場合の左側の部分はbranch_name
となり、右側の部分はbranch_name_test
となります。例えば:あなたはプッシュをしていると
git push origin foo:foo_test
、あなたはgit push
オプションへ-u
を追加することにより、同時にあなたのブランチの上流の名前を設定するために、あなたのgit push
を伝えることができます。上流の名前を設定するとfoo
ブランチ上にある間に、git push
が引数なしのgit push
がリモートのfoo_test
にプッシュしようとすることができるように、foo_test
(または何でも)名前を保存します。この場合はorigin
と入力する必要はありません。
一度だけ-u
を渡す必要があります。基本的にはgit branch --set-upstream-to
が実行されます。 (-u
を後でもう一度渡すと、指示通りに変更された上流設定が再実行されるか、git branch --set-upstream-to
を自分で実行することができます)。
ただし、gitが2.0以降で、上記の脚注1を入力したのと同じ種類のものに遭遇します。push.default
はsimple
に設定されます。アップストリームの名前が自分のローカル名と異なるため、プッシュを拒否します。 push.default
をupstream
に設定した場合、gitの処理は中止されますが、最も簡単な解決策はローカルとリモート名が一致するようにローカルブランチの名前を変更することです。 (どのような設定を設定するために、および/またはあなたのブランチの名前を変更するかどうか、あなた次第です。)
より正確には、Gitはrefspecの上流の半分を導き出すためにあなたのremote.remote.push
の設定を調べます。ここに何も設定していない場合は、のデフォルト値はです。
これはブランチ名である必要はありません。たとえば、HEAD
、またはコミットハッシュをここに指定できます。ブランチ名以外のものを使用している場合はが右側に完全refs/heads/branch
を記載する必要があります(ただし、どの名前がすでにリモートにあるかによって異なります)。
これについては、 '-u'または' --set-upstream'フラグを含めない場合、プッシュするたびにこのコマンド全体を入力する必要があります。 'git push'はアップストリームが設定されるまでそれ自身で動作しません。 – Scott
良い点、私の答えを編集しました –