常に両方の名前を指定せずに、異なる名前のリモートブランチでローカルブランチをプッシュおよびプルする簡単な方法があるかどうか疑問に思っていました。
例えば:
$ 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
に同様の構成オプションがないのですか?これにいいショートカットがありますか、それとも長い道のりを続けるべきですか?
承知しました。ブランチを1つにプッシュするのではなく、Push.default
をupstream
に設定して、ブランチを上流にプッシュします(pull
がプルする、branch.newb.merge
で定義されるものと同じです)名前の一致(Push.default
、matching
のデフォルト設定)。
git config Push.default upstream
これは、Git 1.7.4.2以前ではtracking
ではなくupstream
と呼ばれていたため、Gitの古いバージョンを使用している場合は、代わりにtracking
を使用してください。 Push.default
オプションはGit 1.6.4で追加されたため、それより古いバージョンを使用している場合は、このオプションはまったくなく、プッシュするブランチを明示的に指定する必要があります。
最初のプッシュを行うとき、 -uパラメーター を追加します。
git Push -u Origin my_branch:remote_branch
その後のプッシュは、必要な場所に移動します。
編集:
コメントによると、それはプルを設定するだけです。
git branch --set-upstream
それを行う必要があります。
Adam によるコマンドは廃止されました。次を使用できます。
git branch --set-upstream-to Origin/my_remote_branch my_local_branch
my_local_branch
の上流ブランチをOrigin/my_remote_branch
に設定します。
ここに私のために働いたプロセスがあります。
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