web-dev-qa-db-ja.com

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にプッシュし、ブランチとしてそこに残したいのですが、どうすればよいですか?

2)Origin/devの代わりにデフォルトでOrigin/masterにプッシュするようにローカルで何を/どこで/どのように設定する必要がありますか

13
Eugene

更新:

したがって、通常はリモートで作業する場合、まず最初にリポジトリまたはブランチをプルする必要があります。

そのリポジトリなら

git pull Origin

その枝なら

git pull Origin <yourRemoteBranchName>

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


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

git checkout -b your_branch

リモートブランチは、リモートサーバーにプッシュすると自動的に作成されます。したがって、準備ができたと感じたら、次のようにすることができます。

git Push <remote-name> <branch-name>

ここで、<remote-name>は通常Originで、これはgitがクローン元のリモートに付けた名前です。その後、同僚はそのブランチをプルするだけで、ローカルに自動的に作成されます。

ただし、形式は次のとおりです。

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オプションは上流ブランチをセットアップします。

最新の、または正常にプッシュされたすべてのブランチについて、引数なしのgit-pull(1)およびその他のコマンドで使用される上流(追跡)参照を追加します。

上流のブランチと直接マージしたい場合は、

git merge branchName

このドキュメントを参照できます: https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging 。かなり良い例があります。

12

ローカルでdevブランチに切り替えてから、Originリモートのdevブランチにプッシュします。

git checkout dev
git Push -u Origin dev

-ugit Pushオプションは、開発ブランチにいるときにgit Pushgit pullgit Push Origin devgit pull Origin devと同じことを自動的に実行するように上流の追跡を設定します。


あなたの質問を誤解していて、「dev ...」を含むすべてのブランチをOriginのそれぞれのブランチにプッシュしたい場合は、それらのブランチごとに上記の手順を実行するか、git Push Origin --allをプッシュしてプッシュall Originリモートへのブランチ。したがって、Originでは、Origin/devOrigin/dev_3_featureなどになります。


私があなたの質問を二重に誤解していて、「dev ...」を使用してすべてのブランチを単一のリモートブランチにプッシュしたい場合は、そうしないことをお勧めします。すべての開発ブランチを1つのブランチにマージ/リベースし、それをOriginにプッシュするのがおそらく最善です。 devという1つのブランチを使用するとします。

git checkout dev
git merge dev_3_feature
git merge dev_second_feature
git Push -u Origin dev

マージのたびに、マージの競合を解決する必要がある場合があるため、警告が表示されます。

最後の注意として、dev_second_featureのような名前は機能が何であるかを実際には知らないので、将来の機能ブランチのためにいくつかのよりわかりやすいブランチ名が必要になる場合があります。

2
Lawrence Lee