1. ホーム
  2. git

[解決済み] git fetch と git fetch origin master はブランチの追跡で異なる効果を発揮する

2022-03-13 10:07:36

質問

Gitに慣れ親しもうとしている私にとって、これはほとんど好奇心のようなものです。git fetch'のドキュメントを見ましたが、以下のような明らかな説明が見当たりません。 また、これが非常に明白なことであればお詫びします。

1) 中央のリポジトリ(例えばGitHub)から、次のような名前のリポジトリをクローンします。 website を2台のマシンにそれぞれインストールする。 HostAHostB .

2)で HostA あるファイルに変更を加える場合、例えば README.txt そして、それをコミットします。
この時点で HostA ブランチのコミット masterorigin/master は、まだプッシュしていないので、予想通り異なっています。

git show master
git show origin/master

は異なるハッシュを報告します。 master には変更があり origin/master はしない)

3) 一度押したら、それ以降は同じです。


4) さて、上の HostB , 以下のようにすると。

git fetch
git merge FETCH_HEAD

その後、HostBで masterorigin/master で問い合わせた場合、同じハッシュを報告します。 git show

BUT

その代わりに、もし私が HostB :

git fetch origin master
git merge FETCH_HEAD

この時点では、ハッシュはまだ異なっています。

git show origin
git show origin/master

報告 異なる ハッシュ

追跡用ブランチ origin/master を実行するまで更新されません。 git fetch

これはなぜでしょうか?

解決方法は?

あなたのブランチに関連する リモートトラッキングブランチ というのは、その構成が似ているということです。

git config branch.[branch-name].remote [remote-name]
git config branch.[branch-name].merge [remote-master]

の重要な部分です。 git fetch で、この2つのコマンドの違いを説明しています。

<refspec>

の書式は <refspec> パラメータは、オプションのプラス + の後に、ソース参照 <src> の後にコロンが続きます。 : に続いて、宛先の参照番号 <dst> .
にマッチするリモート参照は <src> が取得され もし <dst> が空文字列でない場合、それにマッチするローカル参照は <src> .

もう一度言います。

もし <dst> が空文字列でない場合、それにマッチするローカル参照は <src> .
それを知っていること。

  • git fetch は、次のものと同等です。 git fetch origin master:master (ブランチ設定のデフォルト値から)リモート追跡ブランチを更新するようになります。 refspecの送信先が指定されます。 .

  • git fetch origin master は " と同じ意味です。 git fetch origin master: は、" ではなく、" git fetch origin master:master の取得値を保存します。 master ブランチ(リモートの' origin ') にある FETCH_HEAD にはなく、' master ' ブランチまたはリモートトラッキングの ' remotes/origin/master ' ブランチ (from ヤコブ・ナレブスキー 's 回答 )
    言い換えると refspecの送信先を指定していない場合