9

この質問の変形に対処する他の質問があることは知っています。つまりこれ

問題は、すべてのローカル ブランチがすでにリモート ブランチを追跡している (またはリモートに存在する) ことを回答が想定していることです。

私が今直面している問題は、私がリモート チームと協力していて、ローカルにないリモート ブランチを作成する場合があることです。

1 つのコマンドで、ローカルで追跡しているブランチへの最新の変更と、追跡していないすべてのブランチの最新バージョンの両方をプルするにはどうすればよいですか。

これを行うgit pull --allと、追跡されている最新のブランチをプルするだけです。

ありがとう。

編集:

と の 2 つのリモコンがbitbucketありherokuます。

bitbucketリモートからではなく、リモートからすべてのブランチをプルしたいのですがheroku

これは私がしました:

$ git pull bitbucket --all fatal: fetch --all does not take a repository argument

この:

$ git pull --all bitbucket fatal: fetch --all does not take a repository argument

これも:

$ git pull bitbucket Password: You asked to pull from the remote 'bitbucket', but did not specify a branch. Because this is not the default configured remote for your current branch, you must specify a branch on the command line.

4

3 に答える 3

5
$ git remote update
$ git pull --all

それを行う必要があります-1つのコマンドではありませんが

于 2013-07-19T21:02:41.523 に答える
0

git fetch all
も邪魔にならないオプションです。

于 2013-07-20T01:34:23.363 に答える
0

元のポスターから取得したいリモートに関する新しい情報に基づいて回答を更新しました。

git fetch bitbucket

リモート追跡ブランチを更新し、リモートに新しいブランチがある場合は新しいブランチを追加します。

fetchrefspec も渡さない限り、ローカル ブランチは更新されません。また、そのような場合は早送りまたは強制更新のみが行われ、真のマージは行われません。

以下は、bitbucket からフェッチし、リモート トラッキング ブランチとローカル マスター ブランチの両方を更新するエイリアスです。

sync = "!git checkout --quiet head && git fetch --prune bitbucket +refs/heads/*:refs/remotes/bitbucket/* master:master && git checkout --quiet - || git checkout --quiet -"

次のように使用しますgit sync。終わり!

フェッチする--pruneオプションは、bitbucket リモートに存在しなくなったブランチの古いリモート トラッキング ブランチも削除することを意味します。

refspec+refs/heads/*:refs/remotes/bitbucket/*は、bitbucket からすべてのブランチをフェッチし、それらをローカル リポジトリの bitbucket のリモート追跡ブランチにマッピングすることを意味します。前にあるの+は、強制更新が許可されることを意味します。これは通常、リモート追跡ブランチでは問題ありません。

refspecmaster:masterは、masterbitbucket でブランチを取得し、それを使用してローカルmasterブランチを更新することを意味します。が+ないため、強制更新は行いません。それを許可したい場合は+、次のように前に a を追加します+master:master

git checkout --quiet headたまたまローカルをmasterチェックアウトしている場合は、最初に行う必要があります。そうしないと、チェックアウトfetch中に更新されないためです。コマンドを実行するときにたまたまチェックアウトしていた場合は、代わりに直接実行しているコミットをチェックアウトします (これがhead意味することです)。これにより、masterブランチ ラベルは、実行していないときに自由に移動できます。

ブランチのフェッチと更新が機能したかどうかに関係なく、git checkout --quiet - || git checkout --quiet -以前に実行されていたブランチをチェックアウトします。git checkout --quiet head(実際に失敗した場合に問題が発生したことがありますが、その理由はわかりません...ヘッドが切り離された状態になった場合は、実行するだけでgit checkout <branch name>問題ありません)。


古い答え:

を使用するgit fetch --allと、リポジトリに追加したすべてのリモートからすべてのブランチが取得されます。すべてのローカル ブランチが更新されるわけではありませんが、これで開始できます。

于 2013-07-19T23:00:21.563 に答える