後者は前者よりも速いことがわかったので、通常はgit fetch
ローカルブランチをリモートと同期する必要があるときはいつでも。違いがあるとすれば何ですか?
以下のコマンド:
git fetch
git reset --hard Origin/<branch>
ローカルの変更をすべて破棄します。
どこに:
git pull
これは次とまったく同じです。
git fetch
git merge Origin/<branch>
ローカルの変更を保存しようとします。
$ git pull
# takes the latest changes of Origin/branch (exists both local & remote changes)
$ git reset --hard Origin/branch
# replace your local with Origin's branch history (discard local changes)
例:たとえば、ローカルA
、B
に2つのコミットがあり、リモートに2つのコミットA
、C
があります。ここでプルすると、ローカルにはA
、B
、C
が含まれますresetとは異なり、ローカルにはA
、C
はB
ではありません。
ソースアップデートを取得する方法は、パフォーマンスの問題よりも重要です。特定のケースではそれらを利用する必要があります。 2つの例を挙げましょう。
git reset --hard ...
は、デバッグのためにプロダクションコードを変更することが多い場合に、プロダクションでコードを更新するために使用できます。これは通常、プロジェクト展開の初期段階で怠惰な考えで起こります。git pull
は、新しいコミットを取得する最も受け入れられている方法であり、通常、ローカルで大きな変更を加えないことは理にかなっています。同じブランチに多くの人がいるためにコミット期間が長くなると、最終的にはやる気が出るかもしれませんgit pull --rebase
または最初にフェッチしてから比較します。Gitは、開発スタイルの非常に具体的なニーズに対して明示的である場合があり、それらを外出先で発見できます。作業が安全であることを確認したら、パフォーマンスはまったく問題になりません。
これらの2つのコマンドは、主にさまざまな状況で使用されます。
git pull
リモートからローカルに変更をプル(フェッチおよびマージ)します。特に、他のプッシュコミットをリモートにコミットし、これらのコミットをローカルブランチに適用します。
git reset --hard Origin/branch
は、Origin/branchが指しているコミットをローカルブランチが指すようにするための強制です。通常は、ローカルで行った変更を破棄し、ローカルブランチをリモートステータスのままにしておきたい状況です。
彼らは何をするかで完全に異なります:
git pull
:リモートリポジトリからの変更を現在のブランチに組み込みます。デフォルトモードでは、git pullはgit fetchの後にgit merge FETCH_HEADが続く形式です。
git reset --hard Origin/branch
を使用すると、Gitは次のことを行います。
<SOME-COMMIT>
を指すように戻します。<SOME-COMMIT>
でコミットされたバージョンと同じにします。注:git reset --hard
は、コミットされていない変更をすべて破棄するため、危険なコマンドである可能性があることに常に注意する必要があります。安全のため、使用する前にgit statusの出力がクリーン(つまり、空)であることを常に確認する必要があります。