16

refspec を使用すると、リモート ブランチを取得して、同様のブランチを作成できますが、名前を指定できます (または、その逆: ローカル ブランチとは異なる名前でリモート ブランチを作成します)。私は1つの小さなことについて困惑しています-プルは現在のブランチとのマージも行うため、次とは異なる動作が予想されます:

git fetch origin master:mymaster

そしてから

git pull origin master:mymaster

上記のコマンドはどちらもまったく同じ結果を生成するようです。つまり、origin/master と同じ、mymaster というローカル ブランチです。私は正しいですか、それとも2つの間に漠然とした違いがありますか?

最後に、refspec を使用すると、追跡ブランチではなくローカルブランチが作成されますよね? 追跡ブランチは、引数なしで git push を呼び出すと自動的にプッシュされるため、AFAIK

4

4 に答える 4

32

refspec は単なるソース/宛先のペアです。refspecx:yを使用するfetchと、リモート リポジトリの「x」という名前のブランチのコピーである「y」という名前のこのリポジトリにブランチを作成するように git に指示されます。他には何もありません。

を使用pullすると、git は上にマージをスローします。最初に、指定された refspec を使用してフェッチが行われ、次に宛先ブランチが現在のブランチにマージされます。わかりにくい場合は、次の手順に従ってください。

git pull origin master:mymaster
  1. origin に移動し、ブランチ "master" を取得します
  2. 「mymaster」という名前のコピーをローカルに作成します
  3. 「mymaster」を現在のブランチにマージします

完全修飾、それはrefs/heads/mymasterandになりrefs/heads/masterます。比較のために、クローンで git によって設定されるデフォルトの refspec は+refs/heads/*:refs/remotes/origin/*. refs/remotesリモート ブランチをローカル ブランチから分離しておくための便利な名前空間を作成します。あなたがやっていることは、リモート追跡ブランチをローカル ブランチと同じ名前空間に置くように git に指示することです。

「ブランチの追跡」に関しては、これは、デフォルトでローカルブランチをプルおよびプッシュする場所をgitに伝える構成ファイルの単なるエントリです。

于 2011-08-24T01:12:15.230 に答える
4

git fetch origin master:mymasterリモート リポジトリのマスター ブランチから取得することにより、ローカル リポジトリのブランチ mymaster を更新します。

git pull origin master:mymaster上記を行い、現在のブランチにマージします。

于 2011-08-24T01:06:51.207 に答える
-1

smartgit を使用してブランチを作成したため、そのブランチが master に適切にマージされていない可能性があります。リリース、つまり support/4.2 のサポート ブランチを作成しました。タグは自動的に作成されますが、git pull を実行しようとすると、同じエラーが表示されます。support/4.2 ブランチは github で作成されますが、ローカルでは適切にマージされません。だから私はこれを使用しました:- git pull origin master:mymaster

私の場合 - git pull origin support/4.2:support/4.2

できます :)

于 2015-07-09T06:31:17.297 に答える