これらのコマンドの違いは何ですか?:
# 1
git pull
# 2
git pull origin
# 3
git pull origin master
# 4
git pull origin/master
# 5
git pull origin HEAD:master
これらのコマンドの違いは何ですか?:
# 1
git pull
# 2
git pull origin
# 3
git pull origin master
# 4
git pull origin/master
# 5
git pull origin HEAD:master
site:stackoverflow.com git Difference "git pull" "git pull origin master"ます。
回答:
git pullは便利なコマンドで、同時にさまざまなことを実行します。基本的にはgit fetch、リモートリポジトリに接続して新しいコミットをフェッチする、とgit merge(またはgit rebase)新しいコミットをローカルブランチに組み込む(または)の組み合わせにすぎません。関係する2つの異なるコマンドのため、の意味git pullは必ずしも明白ではありません。
ローカルブランチのアップストリームを設定できます。新しいクローンの後、ローカルブランチ「master」、リモート「origin」があり、マスターブランチにはアップストリームとして「origin / master」があります。以下の設定を想定しています。(git branch -vv.git / configを使用して、または.git / configを参照することで、アップストリーム構成を確認できます。)
今あなたの質問のために:
git pull= git fetch origin+ git merge origin/master(またはアップストリームが何であれ)git pull origin= git pull(オリジンがアップストリームリモートである限り)git pull origin master= git fetch origin master+git merge FETCH_HEADgit pull origin/master :「origin / master」というリモコンがない限り無効git pull origin HEAD:master:ローカルマスターを、HEADがオリジンで指しているものに直接リセットしようとします。(これをしないでください。)git pull origin HEAD:master悪い考えを実行するのですか?
git pull、そのブランチまたはマスターをプルします
git pull origin HEAD:master本質的に(Git 2.6でスクリプトがCで書き直されるまでは文字通りでした)、HEAD:masterパーツをgit fetchに渡しgit fetchます。これにより、そのステップで何が行われるかがわかります。次に、git fetchステップが取得したコミットハッシュを使用してマージまたはリベースします。Refspecsはsource:destであるためHEAD、他のGitに渡されて翻訳されます。つまり、他のGit次第ですが、通常、他のGitHEADはその名前ですmaster。自分でいない場合master、merge-or-rebaseはfetch-updated master(dest)を使用します(fetch失敗しない限り)。
git pull origin br1 br2。見た目も感じもこのようになりますが、そうではありgit checkout br1; git pull origin; git checkout br2; git pull originません。代わりに、実際には次のことを行いますgit fetch origin && git merge origin/br1 origin/br2。これは、両方のフェッチ結果を現在のブランチにマージします。これは、Gitがタコのマージと呼んでいるものです。これは誰もが望んでいることではありません。おそらくgit pull完全にコマンドを拒否すべきである(実際には誰もない、それは最初のフェッチを実行することができますしたいが、その後、マージ)。
Apullは基本的にfetch(いくつかのコミットと関連オブジェクトをリモートリポジトリからあなたのリポジトリに取得する)であり、次にこれらを作業コピーに「適用」する操作です。デフォルトでは、第2段階はを使用しmergeて実行されますが、pull.rebase変数をに設定するtrueと、代わりにリベースされます。
pullコマンドでポップアップする2つの質問があります。1つ目は、正確に何がフェッチされるのかということです。2つ目は、これらの変更を作業コピーにどのように適用するかです。最初から始めましょう。コマンドの完全な形式は次のとおりです。
git pull [options] [repository] [<refspec>...]
options(作るために例えば--rebase制御動作することをフラグであるpullとして仕事をfetch+rebaseしてもpull.rebaseですfalse)。
repository フェッチ元のリモートの名前(またはURL)です。
refspecs は、リモートでフェッチする参照と、現在の作業コピーのどこにそれらを配置するかを指定する簡潔な方法です。
最初に最も明確な形式を取りましょう。
git pull origin branch1:branch2
これは基本的branch1に、呼び出されたリモートの参照の変更をプルしoriginてから、それらをローカルブランチにマージ(またはリベース)することを意味しbranch2ます。たとえば、と言うとgit pull origin master:dev、とdev同じコミットを指すというローカルブランチが呼び出されmasterます。refspecの指定方法の詳細はこちらです。を使用して、*複数のrefspecを示すことができます。たとえば、git pull origin refs/heads/*:refs/heads/*はすべてのブランチ(の下に格納されているheads)をローカルリポジトリにプルし、それらを同じ名前のローカルブランチにマージします。
それでは、デフォルトがどのように機能するかを説明するために、引数を1つずつ削除してみましょう。まず、refspecから宛先を削除して、単にと言うことができますgit pull origin branch1。これにより、最初fetchにリモートブランチbranch1がローカルリポジトリに移動します。と呼ばれる一時的な参照として利用できるようになりますFETCH_HEAD。その後、実行git merge FETCH_HEADされ、このブランチが現在アクティブなブランチにマージされます(つまりHEAD)。これは、ローカルブランチにいて、リモートからそのブランチに変更をフェッチする場合によく行われます。
さて、branch1完全にドロップして、ただ言ってみましょうgit pull origin。これで、gitは(origin)からどこからフェッチするかはわかりますが、何をフェッチするかはわかりません。これにはいくつかのデフォルトがあります。ほとんどのシナリオは、構成ファイルにbranch.<name>.mergeオプションがある場合です(これはのmergeようなセクション内で呼び出されるエントリです[branch "master"])。もしそうなら、それは操作のためにそこにあるrefspecsを使用します。
origin完全に削除して単に「」と言うとgit pull、設定をチェックして、branch.<name>.remoteプル元のリモートを指定するが存在するかどうかを確認します。上記と一緒にそれはあなたに何を引っ張るかを教えてくれます。
ポイント4と5は、通常のユースケースではありません。最初の方法は、リモートが呼び出されるorigin/master可能性が低い場合に意味があります。origin/masterで、通常は追跡ローカル参照masterリモートでブランチをorigin。2つ目はHEAD、リモート(通常はデフォルトのブランチ)で変更をフェッチしてから、masterそれらをローカルにマージしようとしますmaster。これはあなたが定期的にやりたいことかもしれませんが、コマンドは非常に型破りで、私が頻繁に使用するものではありません。
いくつかの詳細はスキップしましたが、これらは日常業務で安全で快適に保つのに十分なはずです。厄介な詳細については、のマニュアルページを確認してくださいgit pull。
masterリモートからブランチを取得しますが、devローカルで呼び出されます。
git pull origin refs/heads/*:refs/heads/*私のために働いていませんでした、そして私は得ましたno matches found: refs/heads/*:refs/heads/*。私も試しましたがgit pull origin refs/remotes/origin/*:refs/heads/*、それもうまくいきませんでした。1つのコマンドでリモート上のすべてのブランチをプルすることは不可能だと思います。また、これらすべてのブランチを後続のローカルブランチにマージ/リベースすることもできません。
git pullアップストリームを構成しないとはどういう意味ですか?(マニュアルページには、デフォルトで設定されたアップストリームのみが記載されています。)