残念ながら、それらが一般的に同等であるかどうかは、使用しているブランチ、構成、月の満ち欠けなどによって異なります。
以下で説明するように、マニュアルページからこれを理解することができますgit pullが、私は通常、次のようにしてそれを解決する必要がないようにしgit fetch originますgit merge origin/foo。(私はこれについてややとりとめのないブログ記事を書きました。)
ただし、あなたの質問はgit pull、リモートまたはrefspecを指定しない場合のデフォルトの動作に関するものです。git pullこれは、 man ページ、特にDEFAULT BEHAVIOURセクションから理解できます。これを理解するのはやや難しいので、(a) あなたがfooブランチにいること、(b) 質問で説明したようにそのブランチを作成したこと、および ( c) 構成を変更していない。
多くの場合、パラメーターを指定せずに git pull を使用します。伝統的に、これは言うことと同等git pull originでした。ただし、branch.<name>.remoteブランチに構成が存在<name>する場合は、代わりにその値が使用されますorigin。
フェッチに使用する URL を決定するために、構成の値remote.<origin>.urlが調べられ、そのような変数がない場合は、ファイル内のURL:行の値が使用されます。$GIT_DIR/remotes/<origin>
コマンド ラインで refspec パラメーターを指定せずにコマンドを実行したときに、どのリモート ブランチを取得するか (オプションでリモート トラッキング ブランチに格納するか) を決定するために、構成変数の値remote.<origin>.fetchが調べられます。$GIT_DIR/remotes/<origin>ファイルが参照され、そのPull: 行が使用されます。OPTIONS セクションで説明されている refspec 形式に加えて、次のようなグロビング refspec を使用できます。
refs/heads/*:refs/remotes/origin/*
グロビング refspec には空でない RHS が必要であり (つまり、リモート追跡ブランチでフェッチされたものを格納する必要があります)、その LHS と RHS は で終わる必要があり/*ます。refs/remotes/origin/上記は、すべてのリモート ブランチが同じ名前の階層内のリモート トラッキング ブランチを使用して追跡されることを指定します。
下位互換性を損なわないようにするために、フェッチ後にマージするリモート ブランチを決定するルールが少し複雑になります。
明示的な refspec が git pull のコマンド ラインで指定された場合、それらはすべてマージされます。
コマンド ラインで refspec が指定されていない場合、git pull は構成または$GIT_DIR/remotes/<origin>. このような場合、次の規則が適用されます。
If branch.<name>.merge現在のブランチの構成が存在します。これは、マージされるリモート サイトのブランチの名前です。
refspec がグロビングの場合、何もマージされません。
それ以外の場合、最初の refspec のリモート ブランチがマージされます。
ブランチfooを作成したとき:
git checkout origin/foo -b foo --track
...次の構成オプションが設定され、ブランチfooがリポジトリrefs/heads/fooに関連付けられます。origin
branch.foo.remote=origin
branch.foo.merge=refs/heads/foo
したがって、それを上記の太字の文と組み合わせると、答えは「はい、この状況では、あなたが説明している場合、ブランチにいるときfoo、コマンドgit pullとコマンドgit pull origin fooは同等です。」