web-dev-qa-db-ja.com

ローカルGitブランチを別の名前のリモートに簡単にプッシュするにはどうすればよいですか?

常に両方の名前を指定せずに、異なる名前のリモートブランチでローカルブランチをプッシュおよびプルする簡単な方法があるかどうか疑問に思っていました。

例えば:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git Push Origin newb:remote_branch_name

誰かがremote_branch_nameを更新した場合、次のことができます。

$ git pull

そして、すべてがマージ/早送りされます。ただし、ローカルの「newb」に変更を加えた場合、次のことはできません。

$ git Push

代わりに、私はする必要があります:

% git Push Origin newb:remote_branch_name

少しばかげているようです。 git-pullgit-config branch.newb.mergeを使用してどこからプルするかを決定する場合、なぜgit-Pushに同様の構成オプションがないのですか?これにいいショートカットがありますか、それとも長い道のりを続けるべきですか?

163
jmacdonagh

承知しました。ブランチを1つにプッシュするのではなく、Push.defaultupstreamに設定して、ブランチを上流にプッシュします(pullがプルする、branch.newb.mergeで定義されるものと同じです)名前の一致(Push.defaultmatchingのデフォルト設定)。

git config Push.default upstream

これは、Git 1.7.4.2以前ではtrackingではなくupstreamと呼ばれていたため、Gitの古いバージョンを使用している場合は、代わりにtrackingを使用してください。 Push.defaultオプションはGit 1.6.4で追加されたため、それより古いバージョンを使用している場合は、このオプションはまったくなく、プッシュするブランチを明示的に指定する必要があります。

88
Brian Campbell

最初のプッシュを行うとき、 -uパラメーター を追加します。

git Push -u Origin my_branch:remote_branch

その後のプッシュは、必要な場所に移動します。

編集:

コメントによると、それはプルを設定するだけです。

git branch --set-upstream

それを行う必要があります。

156
Adam Dymitruk

Adam によるコマンドは廃止されました。次を使用できます。

git branch --set-upstream-to Origin/my_remote_branch my_local_branch

my_local_branchの上流ブランチをOrigin/my_remote_branchに設定します。

14
jobin

ここに私のために働いたプロセスがあります。

git clone original-repo-url
git remote rename Origin upstream
git remote add Origin new-repo-url

これで、新しいレポは「Origin」になり、元のレポは「上流」になります。 git remote -vを実行して確認します。 (サイドノート:元のリポジトリから取得するためにアップストリームが使用されます-貢献したいプロジェクトとローカルコピーを同期させるために-そして、あなた自身のリポジトリに貢献できるのでOriginはプルとプッシュに使用されます).

git Push Origin master

これで、新しいリモートリポジトリのマスター(Github上)は元のマスターと同期しますが、機能ブランチはありません。

git rebase upstream/branch-name
git Push Origin master

Rebaseはスマートマージです。その後、もう一度マスターにプッシュすると、選択した機能ブランチが新しいレポのマスターとして表示されます。

オプション:

git remote rm upstream
git remote add upstream new-repo-url
0
urubuz