2016-08-24 9 views
2

あなたはどのように特定のリモートブランチgitのは、どのようにローカルブランチをプッシュする特定のリモート

$ git branch -vv 
dev 4d46c96 [origin/dev] Merge branch '1783' into dev 
dev_3_feature 226b914 second commit in dev_3_feature 
dev_second_feature 6b5f10f second commit in dev_2_feature 
master baf5fc0 [origin/master: ahead 1] master feature 
* myFeature da5cc64 second commit in dev_1_feature 
test 334cf7e commiting my super changes locally 

1)私は私のDEV機能がorigin/devに押し込まれ、そこに滞在することにしたいのローカルブランチをプッシュする私を説明することができますどのように私はそれを行うことができますか?私がするのではなく、デフォルトでorigin/devにプッシュするために、ローカルに設定する必要がありますか/何を/

2)origin/master

答えて

4

アップデート:リモートで作業するとき

ので、一般的には、まず第一にあなたがする必要がありますリポジトリまたはブランチをプルします。その後、

そのリポジトリの場合

git pull origin 

支店であれば、その後

git pull origin <yourRemoteBranchName> 

あなたがそれを引っ張った後、それはあなたのマシンになります。現在のブランチはyourRemoteBranchNameです。


これで、上記のリモートブランチがある場合は、そのリモートブランチからローカルブランチを作成できます。現在のリモートブランチから新しいローカルブランチが作成されます。

git checkout -b your_branch 

リモートブランチは、リモートサーバーにプッシュすると自動的に作成されます。あなたはそれのための準備ができて感じるときので、あなただけ行うことができます:

<remote-name>は、通常、Gitはあなたからクローン化されたリモートに与える名前 originです
git push <remote-name> <branch-name> 

。あなたの同僚はそのブランチをプルするだけで、自動的にローカルに作成されます。

注しかしその正式に、形式は次のとおりです。

git push <remote-name> <local-branch-name>:<remote-branch-name> 

しかし、あなたは1を省略したとき、それは両方のブランチ名が同じであると仮定し。これを言って、注意の単語として、:<remote-branch-name>(コロン)を指定するという間違いをしないでください。そうしないと、リモートブランチが削除されます。

以降のgit pullは何をすべきか知っているようにするために、あなたの代わりに使用することがあります:

git push -u <remote-name> <local-branch-name> 

後述するように、-uオプションは、上流分岐を設定しています

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.

の場合上流ブランチに直接マージする場合は、

git merge branchName 

https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Mergingを参照してください。それはかなり良い例があります。

+0

答えに感謝します。プッシュ後にローカルに作成されたすべてのfeature_branchesが、ブランチを追跡し、それらのすべてが 'origin/my_feature_branch_1'、' origin/my_feature_branch_2'のような 'origin 'から遠く離れていることを意味しますか?' origin/DEV/my_feature_branch_1'、origin/DEV/my_feature_branch_2など – Eugene

+0

あなたはそれを行うことができます、別のブランチからブランチを作成することができます。そして私の答えでは、最初のコマンドを使うことができます。 –

+0

はい '$ git checkout -b dev_3_feature dev'コマンドで私のローカルの' feature_branches'を作ったので、私の支店のリストから見ると 'dev_3_feature'はローカル' dev'に属しています。 。今では機能がローカルで作成され、コミットされたときにリモートの 'origin/dev'にアップロードすることができます。チームリードは' origin/DEV/super_feature'をチェックし、 'origin/dev'にマージすればそうでない場合は、私は "こことそこに修正"のように言うので、私はローカルに私の支店に切り替えることができます何かを修正し、再度リモートにそれをプッシュ – Eugene

2

その後、ローカルのdevのブランチに切り替えて、元のリモートでのdevの枝にプッシュ:

git checkout dev 
git push -u origin dev 

git pushセット上流git push、あなたがのdevの枝の上にあるときになるように追跡し、git pull-uオプション自動的にgit push origin devgit pull origin devと同じことを行います。


私はあなたの質問を誤解し、あなたがすべてのあなたの枝をプッシュしたい場合は、「DEV ...」起源に関するそれぞれの枝に、あなたはそれらの枝のそれぞれについて、上記の手順を行うことができ、またはあなたが行うことができますgit push origin --allプッシュすべてあなたのブランチを元のリモートにします。まあ、私は二重にあなたの質問を誤解して、単一のリモートブランチに「DEV ...」と、すべての枝をプッシュしたいのであれば、原点に、あなたがなどorigin/devorigin/dev_3_feature


を持っていると思います、私はそれをしないことをお勧めします。 devブランチをすべて1つのブランチにマージ/リベースし、それを元に戻した方が良いでしょう。あなたがdevと呼ばれる一方の分岐を使用したいとしましょう:

git checkout dev 
git merge dev_3_feature 
git merge dev_second_feature 
git push -u origin dev 

それぞれが合併した後、あなたはそう警告され、マージの競合を解決する必要があります。

最後の注意として、dev_second_featureのような名前は実際にその機能が何であるかは分かりませんが、将来の機能ブランチの説明的なブランチ名が必要な場合があります。

+0

ありがとうございますが、origin/dev/my_dev_branches'や他のブランチからの多くのブランチを持つツリーのサポートはありませんか? 私の 'master'ブランチは、本番版では清潔にしたいが、私の新しい機能は' origin/dev/my_feature_branch_1'、 'origin/dev/my_feature_branch_2'のようにしたい。チームリードが自分の 'feature_branches'をチェックして、OKなら' origin/dev'にマージすることは可能ですか? – Eugene

+0

ええ、間違いなく可能です。フィーチャーブランチをローカルでチェックアウトし( 'git checkout -b dev/some-feature')、いくつかのことをコミットして、それを押します(' git push -u origin dev/some-feature')。 –

+0

'git push origin dev/dev_3_feature' エラー:src refspec dev/dev_3_featureが一致しません。 エラー:「https://[email protected]/blabla/some.rep.git」にいくつかの参照をプッシュできませんでした – Eugene

関連する問題