「gitpull」と「gitfetch」の違いは何ですか?

2008年11月15日に質問されました。  ·  閲覧回数 2.9M回  ·  ソース

pupeno picture
2008年11月15日

git pullgit fetchの違いは何ですか?

回答

Greg Hewgill picture
2008年11月15日
10198

簡単に言うと、 git pullgit fetchその後にgit merge続きます。

いつでもgit fetchを実行して、 refs/remotes/<remote>/下のリモート追跡ブランチを更新できます。

この操作は、 refs/heads下にある独自のローカルブランチを変更することはなく、作業コピーを変更せずに安全に実行できます。 バックグラウンドでcronジョブで定期的にgit fetch実行している人のことも聞いたことがあります(ただし、これを行うことはお勧めしません)。

git pullは、ローカルブランチをリモートバージョンで最新の状態にすると同時に、他のリモート追跡ブランチを更新するために行うことです。

git pullのGitドキュメントから:

デフォルトモードでは、 git pullgit fetch省略形で、その後にgit merge FETCH_HEAD続きます。

Mouna Cheikhna picture
2011年08月18日
2233
  • pullを使用すると、Gitは自動的に作業を実行しようとします。 状況依存であるため、Gitはプルされたコミットを現在作業中のブランチにマージします。 pullは、最初にコミットを確認しなくても、コミットを自動的にマージします。 ブランチを厳密に管理しないと、頻繁に競合が発生する可能性があります。

  • fetch 、Gitは現在のブランチに存在しないターゲットブランチからコミットを収集し、ローカルリポジトリに保存します。 ただし、それらを現在のブランチとマージすることはありません。 これは、リポジトリを最新の状態に保つ必要があるが、ファイルを更新すると壊れることがある何かに取り組んでいる場合に特に便利です。 コミットをマスターブランチに統合するには、 mergeを使用します。

MikeD picture
2013年04月01日
1248

gitの設計哲学をSVNのようなより伝統的なソース管理ツールの哲学と対比することが重要です。

Subversionは、クライアント/サーバーモデルを使用して設計および構築されました。 サーバーである単一のリポジトリがあり、複数のクライアントがサーバーからコードをフェッチして作業し、サーバーにコミットして戻すことができます。 クライアントは、操作を実行する必要があるときにいつでもサーバーに接続できることを前提としています。

Gitは、中央リポジトリを必要とせずに、より分散されたモデルをサポートするように設計されています(ただし、必要に応じて確実に使用できます)。 また、gitは、クライアントと「サーバー」が同時にオンラインである必要がないように設計されています。 Gitは、信頼性の低いリンク上の人々が電子メールを介してコードを交換できるように設計されています。 完全に切断された状態で作業し、CDを書き込んでgit経由でコードを交換することができます。

このモデルをサポートするために、gitはコードを含むローカルリポジトリと、リモートリポジトリの状態をミラーリングする追加のローカルリポジトリを維持します。 リモートリポジトリのコピーをローカルに保持することで、gitは、リモートリポジトリに到達できない場合でも、必要な変更を把握できます。 後で他の誰かに変更を送信する必要がある場合、gitはそれらをリモートリポジトリに認識されている時点からの変更のセットとして転送できます。

  • git fetchは、「リモートリポジトリのローカルコピーを最新の状態にする」というコマンドです。

  • git pullは、「リモートリポジトリの変更を自分のコードを保持する場所に持ってくる」と言っています。

通常、 git pullは、 git fetchを実行してリモートリポジトリのローカルコピーを最新の状態にし、変更を独自のコードリポジトリと場合によっては作業コピーにマージすることでこれを行います。

ワークステーションにはプロジェクトのコピーが少なくとも

Contango picture
2015年06月09日
927

これは、すべてがどのように組み合わされているかについてのオリバー・スティールのイメージです

enter image description here

十分な関心があれば、画像を更新してgit clonegit mergeを追加できると思います...

mepster picture
2010年05月08日
510

git fetch使用例の1つは、最後のプル以降のリモートブランチの変更を以下に示すことです。したがって、実際のプルを実行する前に確認できます。これにより、現在のブランチのファイルが変更され、機能する可能性があります。コピー。

git fetch
git diff ...origin

diffコマンドの二重ドットおよび三重ドット構文については、 https

Gerardo picture
2012年05月12日
383

何が違うのか理解するのに少し時間がかかりましたが、これは簡単な説明です。 ローカルホストのmasterはブランチです。

リポジトリのクローンを作成すると、リポジトリ全体がローカルホストにフェッチされます。 これは、その時点で、 HEADへのオリジン/マスターポインタと、同じHEAD指すマスターがあることを意味します。

作業を開始してコミットを実行すると、マスターポインタがHEAD +コミットに進みます。 ただし、オリジン/マスターポインターは、クローンを作成したときの状態を示しています。

したがって、違いは次のようになります。

  • git fetchすると、リモートリポジトリ( GitHub )内のすべての変更がフェッチさHEADます。 その間、ローカルブランチマスターはそれがどこにあるかを指し続けます。
  • git pullを実行すると、基本的に(前に説明したように)フェッチを実行し、マスターブランチへの新しい変更をマージして、ポインターをHEAD移動します。
thedarkpassenger picture
2016年01月26日
234

視覚的な表現が役立つ場合があります。

enter image description here

Snowcrash picture
2013年04月14日
229

簡単に

git fetchpull似ていますが、マージされません。 つまり、リモート更新( refsobjects )をフェッチしますが、ローカルは同じままです(つまり、 origin/masterは更新されますが、 masterは同じままです)。

git pullはリモートからプルダウンし、即座にマージします。

もっと

git cloneはリポジトリのクローンを作成します。

git rebaseは、アップストリームブランチにない現在のブランチから一時的な領域にあるものを保存します。 これで、ブランチは変更を開始する前と同じになります。 したがって、 git pull -rebaseはリモートの変更をプルダウンし、ローカルブランチを巻き戻し、最新になるまで現在のブランチの上で変更を1つずつ再生します。

また、 git branch -aは、ローカルとリモートのすべてのブランチで何が起こっているかを正確に示します。

このブログ投稿は役に立ちました:

git pull、git fetch、git clone(およびgit rebase)の違い-Mike Pearce

git pullgit fetchgit clonegit rebaseをカバーします。

====

更新

実際にこれをどのように使用するかを示すために、これを更新すると思いました。

  1. リモートからローカルリポジトリを更新します(ただし、マージしないでください)。

    git fetch 
    
  2. アップデートをダウンロードしたら、違いを見てみましょう。

    git diff master origin/master 
    
  3. これらの更新に満足している場合は、以下をマージします。

    git pull
    

ノート:

ステップ2:ローカルとリモートの差分の詳細については

ステップ3:ここでgit rebase originを実行する方が、おそらくより正確です(たとえば、急速に変化するリポジトリの場合)。 別の回答の@JustinOhmsコメントを参照してください。

参照: http

Vinko Vrsalovic picture
2008年11月15日
185
 git-pull-別のリポジトリまたはローカルブランチからフェッチしてマージします
概要

 gitpull…
説明

指定されたパラメーターを使用してgit-fetchを実行し、git-mergeを呼び出して 
現在のブランチにヘッドを取得しました。 --rebaseを使用して、git-rebaseを呼び出します 
 git-mergeの代わりに。

を使用できることに注意してください。 (現在のディレクトリ)プルする<リポジトリ>として 
ローカルリポジトリから—これはローカルブランチをマージするときに役立ちます 
現在のブランチに。

また、git-pull自体と基礎となるgit-mergeを対象としたオプションにも注意してください 
 git-fetch用のオプションの前に指定する必要があります。

履歴をマージしたい場合はプルし、誰かがこのあたりの記事にタグを付けているので、「codezが必要な場合」にフェッチします。

Antonio Bardazzi picture
2011年03月21日
166

リモートリポジトリからフェッチし、違いを確認してから、プルまたはマージすることができます。

これは、リモートリポジトリの例では、と呼ばれるoriginと呼ばれるブランチmaster追跡リモートブランチorigin/master

git checkout master                                                  
git fetch                                        
git diff origin/master
git rebase origin master