2016-03-21 5 views
18

私はthis postに従いましたが、私の問題を解決するのではなく、混乱しました。リモートブランチへの押し込み

ここにシナリオがあります。

git checkout -b <branch_name>のようなブランチを作成しました。私はその後、いくつかの変更に勤務し、

  1. git add .
  2. git commit -m "comment"

これで、すべてのこれらの変更は、私のコミットされていない地元の<branch_name>支店にいるんでした。私がしたいのは、これらの変更を上流にプッシュすることですが、存在しないブランチにプッシュしたいのです。たとえば、<branch_name>にプッシュしたくありません。どうすればいいのですか?

答えて

14

単に別の支店名近代的なGitのバージョンで

git push -u origin branch_name: branch_name_test 
+1

これについては、 '-u'または' --set-upstream'フラグを含めない場合、プッシュするたびにこのコマンド全体を入力する必要があります。 'git push'はアップストリームが設定されるまでそれ自身で動作しません。 – Scott

+0

良い点、私の答えを編集しました –

8

git push --set-upstream origin <branch_name>_test

--set-upstreamお近くの支店とリモート間の関連付けを設定します。あなたは初めてそれを行う必要があります。その後のプッシュであなただけ行うことができます。

git push

あなたはoriginはまだ設定されていない場合は、使用を:

git remote add origin <repository_url>は、上記のコマンドを再試行してください。

+0

私が言及したように、私はそれを私のブランチ、 ''にプッシュしたくありません。今のところ存在していない新しいブランチ「 _test」にプッシュしたい –

+0

申し訳ありませんが、それを見ていませんでした。私の答えを更新しました。リモートブランチの名前を任意に指定できます。最後のパラメータは 'push'コマンドで調整してください。 – Scott

5

にこのブランチをプッシュし、使用するコマンドは次のようになります。これは自動的に設定されます

git push -u origin <branch_name_test> 

支店名がリモートから追跡します一押しする

4

あなたがそうのような新しいリモートブランチにあなたのローカルブランチをプッシュすることができます:masterは、お近くの支店名とtestで、

git push origin master:test 

は(originがリモートであると仮定して、新しいリモートブランチの名前です。

新しく作成したリモートブランチを追跡するためにローカルブランチを設定すると同時に、-u(新しいバージョンのGit)または--set-upstreamを使用すると、次のようになります。

git push -u origin master:test 

または

git push --set-upstream origin master:test 

...それを追跡するmaster最寄りのお住まいの地域master設定に基づいて、リモートリポジトリoriginで、testという名前の、新しいリモートブランチを作成します。

27

最初に、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.defaultsimpleに設定されます。アップストリームの名前が自分のローカル名と異なるため、プッシュを拒否します。 push.defaultupstreamに設定した場合、gitの処理は中止されますが、最も簡単な解決策はローカルとリモート名が一致するようにローカルブランチの名前を変更することです。 (どのような設定を設定するために、および/またはあなたのブランチの名前を変更するかどうか、あなた次第です。)


より正確には、Gitはrefspecの上流の半分を導き出すためにあなたのremote.remote.pushの設定を調べます。ここに何も設定していない場合は、のデフォルト値はです。

これはブランチ名である必要はありません。たとえば、HEAD、またはコミットハッシュをここに指定できます。ブランチ名以外のものを使用している場合はが右側に完全refs/heads/branchを記載する必要があります(ただし、どの名前がす​​でにリモートにあるかによって異なります)。

関連する問題