これらのコマンドの違いは何ですか?:
# 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_HEAD
git 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
アップストリームを構成しないとはどういう意味ですか?(マニュアルページには、デフォルトで設定されたアップストリームのみが記載されています。)