リモートブランチを追跡する新しいブランチを作成する方法は知っていますが、 既存のブランチをリモートブランチに追跡するにはどうすればよいですか。
私は.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以降:
git branch --set-upstream foo upstream/foo
注:
foo
はリモートブランチfoo
からリモートブランチupstream
を追跡します。git fetch upstream
を実行してください。次の操作を実行できます(masterでチェックアウトされていて、リモートブランチmasterにpushしたいと仮定して)。
まだ持っていない場合は「リモート」を設定します
git remote add Origin ssh://...
追跡することを知るようにマスターを設定します。
git config branch.master.remote Origin
git config branch.master.merge refs/heads/master
そしてプッシュ:
git Push Origin master
これは、次のように-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
と言いたくなりましたが、ローカルブランチ "Origin/master"を現在チェックアウトされているブランチと統合するようにGitに指示しています。このオプションは非推奨です。代わりに新しい--set-upstream-to
(手短に使える-u
)オプションを使用してください。
ローカルのfoo
ブランチがあり、そのブランチを上流と同じ名前で処理したいとします。これを実現する
$ git branch foo
$ git branch --set-upstream-to=Origin/foo
あるいは単に
$ git branch --set-upstream-to=Origin/foo foo
git_remote_branch
というツールが役に立つかもしれません。リモートブランチの作成、公開、削除、追跡、名前変更のための簡単なコマンドを提供しています。素敵な機能の1つは、どのgitコマンドが実行されるのかを説明するためにgrb
コマンドを要求できることです。
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 remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa
Git 1.5.xでは、このようにローカルブランチ$BRANCH
がリモートブランチOrigin/$BRANCH
を追跡できると信じています。
$BRANCH
とOrigin/$BRANCH
が存在し、現在$BRANCH
をチェックアウトしていない場合(ある場合は切り替えます)、次のようにします。
git branch -f --track $BRANCH Origin/$BRANCH
これにより、$BRANCH
が追跡ブランチとして再作成されます。 -f
は、$BRANCH
がすでに存在するにもかかわらず、強制的に作成を行います。 --track
は、通常のデフォルトが設定されている場合はオプションです(つまり、git-configパラメーターbranch.autosetupmerge
はtrueです)。
Origin/$BRANCH
がまだ存在しない場合は、ローカル$BRANCH
をリモートリポジトリにプッシュして作成できます:
git Push Origin $BRANCH
前のコマンドが続き、ローカルブランチを追跡ブランチに昇格させます。
必ず実行してください。
git config Push.default tracking
問題なくプッシュできるように
.git/config
を編集するのがおそらく最も簡単で最速の方法です。それは、とにかく、リモートブランチを扱うためのGitコマンドがやっていることです。
手作業でファイルを弄りたくない場合(そしてそれを行うのはそれほど難しいことではありません)、git config
を使用してそれを行うことができます...ただし、.git/config
ファイルを編集するだけです。
もちろん、git checkout
を使用するときに(たとえば、--track
フラグを渡すことによって)リモートブランチを自動的に追跡する方法はありますが、これらのコマンドは既存のブランチではなく new branchesで機能します。
とても短い
git branch --set-upstream yourLocalBranchName Origin/develop
これはあなたのyourLocalBranchName
がdevelop
と呼ばれるリモートブランチを追跡するようにします。
1.6.xの場合、 git_remote_branch ツールを使用して実行できます。
grb track foo upstream
これによりGitはfoo
がupstream/foo
を追跡するようになります。
ここでは、github
とgit version 2.1.4
を使って、以下のようにします。
$ git clone [email protected]:user/repo.git
そしてローカルにリンクされていなくても、リモートはitelsefによって来ます:
$ git remote show Origin
* remote Origin
Fetch URL: [email protected]:user/repo.git
Push URL: [email protected]: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 [email protected]:user/repo.git
$ git checkout develop
git pull
の後に:
git checkout --track <remote-branch-name>
または
git fetch && git checkout <branch-name>
次のコマンドを使用します(あなたのローカルブランチ名は "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
新しいブランチを作成するために、以下のコマンドを使用できます。
git checkout --track -b example Origin/example
git branch -u発行元/リモートブランチ名
これはこの質問に対する直接的な答えではありませんが、アップストリームブランチを設定しようとしたときに私と同じ問題を抱えている可能性がある人のためにここにメモを残したいと思いました。
Push.default に注意してください。
古いバージョンのgitでは、デフォルトは matching でした。これは、たとえば次のような場合、非常に望ましくない動作を引き起こす可能性があります。
Origin/masterへのローカルブランチ「master」トラッキング
アップストリーム/マスターへのリモートブランチ「アップストリーム」トラッキング
「上流」ブランチで「git Push」を試みた場合、 Push.defaultマッチングを使用して gitはローカルブランチの「master」を自動的に「upstream/master」にマージしようとします。 。
これにより、より健全な動作が得られます。
git config --global Push.defaultアップストリーム
やや関連した方法で、私は既存のブランチにリモートトラッキングブランチを追加しようとしましたが、そのリモートトラッキングブランチを追加したいシステム上のそのリモートリポジトリにアクセスできませんでした。そのリモートへのプッシュへのアクセス権を持つ別のシステムへのsneakernetを介したレポ)。まだ取得されていないローカルにリモートブランチを追加することを強制する方法はないことがわかりました(そのため、ローカルにブランチがリモートに存在することを認識していなかったため、エラーが発生します:the requested upstream branch 'Origin/remotebranchname' does not exist
)。
結局、私は.git/refs/remotes/Origin/remotebranchname
に新しいヘッドファイルを追加し、それからref(eyeballingが最速、lam)をシステムにコピーすることによって、以前は未知だった新しいリモートブランチを追加することができました。 (私がリモートブランチを追加していたローカルレポジトリで)Originをワークステーションにレポジトリします。
それが終わったら、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)