リモート ブランチを追跡する新しいブランチを作成する方法は知っていますが、既存のブランチをリモート ブランチを追跡するにはどうすればよいですか?
ファイルを編集するだけでよいことはわかってい.git/config
ますが、もっと簡単な方法があるはずです。
リモート ブランチを追跡する新しいブランチを作成する方法は知っていますが、既存のブランチをリモート ブランチを追跡するにはどうすればよいですか?
ファイルを編集するだけでよいことはわかってい.git/config
ますが、もっと簡単な方法があるはずです。
ブランチfoo
とリモートが与えられた場合upstream
:
Git 1.8.0 以降:
git branch -u upstream/foo
または、ローカル ブランチfoo
が現在のブランチでない場合:
git branch -u upstream/foo foo
または、より長いコマンドを入力したい場合、これらは上記の 2 つと同等です。
git branch --set-upstream-to=upstream/foo
git branch --set-upstream-to=upstream/foo foo
Git 1.7.0 以降 (1.8.0 より前):
git branch --set-upstream foo upstream/foo
ノート:
foo
を追跡します。foo
upstream
git fetch upstream
事前に実行してください。-u
これは、次のようにオプションを使用してプッシュすることの副作用として行います
$ git push -u origin branch-name
同等の長いオプションは--set-upstream
.
このgit-branch
コマンドは も認識--set-upstream
しますが、その使用は混乱を招く可能性があります。バージョン 1.8.0ではインターフェイスが変更されています。
git branch --set-upstream
は推奨されておらず、比較的遠い将来に削除される可能性があります。git branch [-u|--set-upstream-to]
より健全な順序で引数が導入されました。…
と言いたくなった
git branch --set-upstream origin/master
のですが、これは Git に、現在チェックアウトされているブランチと統合するためにローカル ブランチ「origin/master」を配置するように指示します。このオプションは非推奨です。代わりに新しい--set-upstream-to
( short-and-sweet付きの-u
) オプションを使用してください。
ローカルfoo
ブランチがあり、そのブランチをそのアップストリームと同じ名前で扱いたいとします。これを実現する
$ git branch foo
$ git branch --set-upstream-to=origin/foo
あるいは単に
$ git branch --set-upstream-to=origin/foo foo
Gitバージョン1.8.0以降の場合:
実際に受け入れられた答えが機能するために:
git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR Git version 1.8.0 and higher:
git branch --set-upstream-to=upstream/qa
# Gitversions lower than 1.8.0
git branch --set-upstream qa upstream/qa
このgit_remote_branch
ツールが役立つ場合があります。リモートブランチを作成、公開、削除、追跡、および名前変更するための簡単なコマンドを提供します。grb
優れた機能の1つは、コマンドに実行するgitコマンドを説明するように依頼できることです。
grb explain create my_branch github
# git_remote_branch version 0.3.0
# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch
Git 1.5.x という早い時期に、このようにローカル ブランチ$BRANCH
をリモート ブランチに追跡させることができるorigin/$BRANCH
と思います。
それが存在し$BRANCH
、origin/$BRANCH
現在チェックアウトしていない$BRANCH
場合(チェックアウトしている場合は切り替えます)、次のようにします。
git branch -f --track $BRANCH origin/$BRANCH
これ$BRANCH
は追跡ブランチとして再作成されます。すでに存在しているにもかかわらず、-f
強制的に作成されます。通常のデフォルトが設定されている場合 (つまり、git-config パラメーターが true の場合) はオプションです。$BRANCH
--track
branch.autosetupmerge
origin/$BRANCH
まだ存在しない場合は、ローカル$BRANCH
をリモート リポジトリにプッシュすることで作成できます。
git push origin $BRANCH
ローカル ブランチを追跡ブランチに昇格させる前のコマンドが続きます。
1- git fetch --allを使用してローカル メタデータを更新します。
2- git branch -aを使用してリモート ブランチとローカル ブランチを表示します。 次のスクリーンショットを参照してください。
3-リモートとリンクするターゲットブランチに切り替えます:使用
git チェックアウトのブランチ名
例 :
4- 以下を使用して、ローカル ブランチをリモート ブランチにリンクします。
git branch --set-upstream-to nameOfRemoteBranch
NB : nameOfRemoteBranch : ステップ 2 の出力からコピーする " git branch -r "
使用例:
必ず実行してください:
git config push.default tracking
トラブルなくプッシュできるように
編集.git/config
はおそらく最も簡単で最速の方法です。いずれにせよ、リモート ブランチを処理するための Git コマンドが行っていることです。
ファイルを手でいじりたくない場合 (そしてそれほど難しいことではありません)、いつでも を使用してそれを行うことができます...しかし、繰り返しになりますが、とにかくファイルgit config
を編集するだけです。.git/config
もちろん、(フラグgit checkout
を渡すなどして)使用時にリモート ブランチを自動的に追跡する方法はありますが、これらのコマンドは既存のブランチではなく、新しいブランチで機能します。--track
要するに
git branch --set-upstream yourLocalBranchName origin/develop
これにより、yourLocalBranchName
トラックが というリモート ブランチになりますdevelop
。
1.6.x の場合、git_remote_branchツールを使用して実行できます。
grb track foo upstream
これにより、Git がfoo
トラックを作成しますupstream/foo
。
次のコマンドを使用します (ローカル ブランチ名が「branch-name-local」で、リモート ブランチ名が「branch-name-remote」であるとします)。
$ git branch --set-upstream-to=origin/branch-name-remote branch-name-local
ローカル ブランチとリモート ブランチの名前が同じ場合は、次の手順を実行します。
$ git branch --set-upstream-to=origin/branch-name branch-name
ここで、 と を使用github
してgit version 2.1.4
、次のようにします。
$ git clone git@github.com:user/repo.git
また、ローカルにリンクされていなくても、リモートは itelsef によって提供されます。
$ git remote show origin
* remote origin
Fetch URL: git@github.com:user/repo.git
Push URL: git@github.com:user/repo.git
HEAD branch: master
Remote branches:
develop tracked <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
master tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)
しかしもちろん、まだローカル ブランチはありません。
$ git branch
* master <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
見る?develp をチェックアウトするだけで、魔法のように自動的に実行されます。
$ git checkout develop
Branch develop set up to track remote branch develop from origin.
Switched to a new branch 'develop'
とても簡単!
概要。次の 2 つのコマンドを実行するだけです。
$ git clone git@github.com:user/repo.git
$ git checkout develop
の後git pull
:
git checkout --track <remote-branch-name>
または:
git fetch && git checkout <branch-name>
これはこの質問に対する直接的な回答ではありませんが、アップストリーム ブランチを構成しようとしているときに私と同じ問題を抱えている可能性がある人のために、ここにメモを残しておきたいと思います。
push.defaultには注意してください。
古いバージョンの git では、デフォルトはmatchingでした。たとえば、次のような場合、非常に望ましくない動作が発生します。
オリジン/マスターへのローカルブランチ「マスター」追跡
アップストリーム/マスターへのリモート ブランチ「アップストリーム」トラッキング
「upstream」ブランチで「git push」を試みた場合、push.default と一致するgit は自動的にローカル ブランチ「master」を「upstream/master」にマージしようとし、多くの混乱を引き起こします。
これにより、より正常な動作が得られます。
git config --global push.default アップストリーム
多少関連する方法で、リモート追跡ブランチを既存のブランチに追加しようとしましたが、そのリモート追跡ブランチを追加したいシステム上のそのリモートリポジトリにアクセスできませんでした (これのコピーを頻繁にエクスポートするため)スニーカーネットを介して、そのリモートにプッシュするアクセス権を持つ別のシステムにレポします)。まだフェッチされていないローカルにリモート ブランチを強制的に追加する方法がないことがわかりました (そのため、ローカルはブランチがリモートに存在することを知らず、エラーが発生しました: the requested upstream branch 'origin/remotebranchname' does not exist
)。
最後に、新しいヘッドファイルを追加してから参照をコピーすることで、以前は不明だった新しいリモートブランチを(フェッチせずに)追加することができました.git/refs/remotes/origin/remotebranchname
(目玉が最も速かったので、それは不自由でした;-)、オリジンにアクセスできるシステムからワークステーションへのレポ(リモートブランチを追加していたローカルレポを使用)。
それが完了したら、使用できますgit branch --set-upstream-to=origin/remotebranchname
または単に:
まだブランチにいない場合は、ブランチに切り替えます。
[za]$ git checkout branch_name
走る
[za]$ git branch --set-upstream origin branch_name
Branch origin set up to track local branch brnach_name by rebasing.
そしてあなたは準備ができています:
[za]$ git push origin branch_name
次のコマンドを実行すると、構成ファイルを見て、何が何を追跡しているかを確認できます。
[za]$ git config -e
また、これを知っておくと便利です。追跡されているブランチと追跡されていないブランチが表示されます。:
[za]$ git remote show origin
私のように、ローカル ブランチ名をリモート ブランチ名と同期させたいだけの人には、次の便利なコマンドがあります。
git branch -u origin/$(git rev-parse --abbrev-ref HEAD)
これもうまくいくだろう
git branch --set-upstream-to=/< remote>/< branch> < localbranch>