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


175

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

例えば:

$ 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-pull使用git-config branch.newb.mergeしてどこからプルするかを決定する場合git-push、同様の構成オプションを使用できないのはなぜですか?これの良いショートカットはありますか、それとも長い道のりを続けるべきですか?

回答:


93

承知しました。ただ、あなたを設定push.defaultするupstream(つまり同じである彼らのアップストリームに枝をプッシュするpullことで定義された、から引っ張ってくるbranch.newb.merge(のデフォルト設定であるという名前に一致するものに枝をプッシュするよりも、) 、)。push.defaultmatching

git config push.default upstream

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


それでおしまい!これは追跡しているすべてのブランチに適用されますが、問題ありません。ありがとう!
jmacdonagh

チェックアウトしたブランチ名の省略形があるかどうか知りたいです。私はgit push buildserver .:test_this.必ずしも知っているわけではないローカルブランチの名前をどこにしたいのかを知りたいだけかもしれません。確かに見上げることもできたが、ドットのような短い手があったら、それはかっこいいだろう。
Frederick Nord

2
@FrederickNord HEADは、あなたが探している略記です。HEAD現在チェックアウトされているブランチ、またはデタッチされたヘッドがある場合は特定のコミットを直接指すものです。
ブライアンキャンベル

ありがとう!これでUpdates were rejected because a pushed branch tip is behind its remoteエラーが修正されました。私のローカルリポジトリは最新の状態でしたが、名前が異なっていました。
canhazbits 2014

171

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

git push -u origin my_branch:remote_branch

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

編集:

コメントの通り、それはプルを設定するだけです。

git branch --set-upstream

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


7
-u質問によると、すでに設定されているアップストリームを設定するだけです。彼は上流の設定を尊重するためにに設定push.defaultする必要があります。デフォルトではそうするだけだからです。upstrempushpull
ブライアンキャンベル

2
これは機能していないようです-少なくとも決してgitのバージョンでは動作しません
Thomas Watson

git branch --set-upstreamは、この後にプルセットアップ「pushRemote」を設定する必要があるだけです。
wheredidthatnamecome from '

git branch --set-upstream必要ないと思います。注:私git --versionは2.17.1です。
ガブリエルステープルズ

15

Adamによるコマンドは非推奨になりました。以下を使用できます。

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

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


6
非推奨となった-uについて共有する情報をサポートするリンクを提供できますか?git-scm.comでのプッシュに関する最新バージョンのドキュメントは、それが最新のものであることを示唆しているようです。事前に感謝します-読者が詳細情報をフォローアップすることは非常に役立ちます。
ケイV

@KayVに同意します。特に、ローカルブランチとは異なる名前で新しいリモートブランチを作成しようとしたときにこのメッセージが表示されたことに同意します。 「git push -u」を使用して、プッシュ時に上流の設定を設定します。
FBB、2018年

0

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

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

これで、新しいレポは「origin」になり、元のレポは「upstream」になります。git remote -vを実行して確認します。(補足:アップストリームは、元のレポジトリからフェッチするために使用されます-ローカルコピーをコントリビュートしたいプロジェクトと同期を保つために-独自のレポにコントリビュートできるので、オリジンはプルおよびプッシュに使用されます)。

git push origin master

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

git rebase upstream/branch-name
git push origin master

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

オプション:

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

0

同じ問題がかなり前から発生しています。ようやく一連のステートメントができたので、git push origin local:remote毎回行う必要はありません。私はこれらに従いました:

git branch --set-upstream-to origin/remote_branch_name
git config push.default upstream
git push

アップストリームを別の名前のリモートブランチに設定し(1行目)、そのアップストリームをデフォルト(2行目)にした後、3行目はこれらのルールに従い、設定されたアップストリームにプッシュします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.