262

git pull --help言います:

デフォルトのモードでは、 の後に続くgit pullの省略形です。git fetchgit merge FETCH_HEAD

これは何ですか?FETCH_HEAD中に実際にマージされるのは何git pullですか?

4

7 に答える 7

250

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

于 2012-02-11T03:11:37.767 に答える
23

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
于 2012-12-10T11:37:49.897 に答える
3

git pullは、フェッチとそれに続くマージの組み合わせです。git fetchが発生すると、FETCH_HEADでフェッチしたもののヘッドコミット(.git内のその名前のファイルのみ)が記録され、これらのコミットが作業ディレクトリにマージされます。

于 2012-02-11T02:45:03.500 に答える