git pull --help
言います:
デフォルトのモードでは、 の後に続く
git pull
の省略形です。git fetch
git merge FETCH_HEAD
これは何ですか?FETCH_HEAD
中に実際にマージされるのは何git pull
ですか?
FETCH_HEAD
リモートリポジトリからフェッチされたばかりのものを追跡するための短命の参照です。git pull
最初に を呼び出しgit fetch
、通常はリモートからブランチを取得します。FETCH_HEAD
このブランチの先端を指します (ブランチと同様に、コミットの SHA1 を格納します)。git pull
次に を呼び出し、現在のブランチgit merge
にマージします。FETCH_HEAD
結果はまさに期待どおりです。適切なリモート ブランチの先端にあるコミットが、現在のブランチの先端にあるコミットにマージされます。
git fetch
これは、引数 (またはgit remote update
) なしで実行し、すべてのリモート ブランチを更新してから を実行するのに少し似ていますが、名前を付ける必要がなく、フェッチされた単一の ref を参照するために内部的にgit merge origin/<branch>
使用します。FETCH_HEAD
FETCH_HEADは、フェッチがフェッチコマンドを使用して直接開始されたか、プルの一部として開始されたかに関係なく、最後のフェッチの先端への参照です。FETCH_HEADの現在の値は、ご想像のとおり、.git
という名前のファイルのフォルダーに保存されますFETCH_HEAD
。
だから私が発行した場合:
git fetch https://github.com/ryanmaxwell/Fragaria
FETCH_HEADには次のものが含まれる場合があります
3cfda7cfdcf9fb78b44d991f8470df56723658d3 https://github.com/ryanmaxwell/Fragaria
リモートリポジトリをリモート追跡ブランチとして構成している場合は、追跡ブランチをマージしてフェッチを追跡できます。そうでない場合は、FETCH_HEADを使用して最後のフェッチの先端を直接マージできます。
git merge FETCH_HEAD
git pullは、フェッチとそれに続くマージの組み合わせです。git fetchが発生すると、FETCH_HEADでフェッチしたもののヘッドコミット(.git内のその名前のファイルのみ)が記録され、これらのコミットが作業ディレクトリにマージされます。