Close

git pull

git pull コマンドは、リモート・リポジトリからコンテンツをフェッチしてダウンロードし、そのコンテンツと一致するようローカル・リポジトリを即時にアップデートするために使用されます。中央リポジトリにおける変更のローカル・リポジトリへのマージは、Git ベースのコラボレーション・ワーク・フローではよく行われるタスクです。git pull コマンドは、実際には他の 2 つのコマンド(git fetch とその後の git merge)を組み合わせたものです。操作の第 1 ステージでは、git pull により、git fetchHEAD がポイントされたローカル・ブランチにスコープされて実行されます。コンテンツがダウンロードされると、git pull のマージ・ワークフローが開始されます。新しいマージ・コミットが作成され、HEAD が新しいコミットをポイントするようアップデートされます。


git pull の用途


仕組み

git pull コマンドでは、最初に git fetch が実行されて、指定されたリモート リポジトリからコンテンツがダウンロードされます。次に git merge が実行されて、リモート コンテンツ参照がマージされて新しいローカル マージ コミットに進みます。プルとマージのプロセスをより分かりやすく説明するため、main ブランチとリモート origin を含むリポジトリを例として使用します。

このシナリオでは、git pull によって、ローカルと main が分岐したポイントからのすべての変更がダウンロードされます。この例では E がそのポイントです。git pull によって、分岐リモート コミット (A-B-C) がフェッチされます。その後、プル プロセスによって、新しい分岐リモート コミットのコンテンツを含む新しいローカル マージ コミットが作成されます。

コンソール・ウィンドウ
関連資料

高度な Git ログ

Bitbucket ロゴ
ソリューションを見る

Bitbucket Cloud での Git の使用方法についてのチュートリアルです。

上の図には、新しいコミット H があります。このコミットは、リモート A-B-C コミットのコンテンツおよび統合されたログ メッセージを含む新しいマージ コミットです。この例は、いくつかの git pull マージ戦略の 1 つです。--rebase オプションを git pull に渡し、マージ コミットの代わりにリベース マージの戦略を使用できます。次の例は、リベース プルの動作を示しています。最初の図の開始ポイントで、git pull --rebase を実行したと想定します。

中央の Git リポジトリからローカルの Git リポジトリへ

この図では、リベース プルによって新しい H コミットが作成されていません。代わりに、リベースによってリモート コミット A--B--C がコピーされて、ローカル コミット E--F--G が書き換えられて、ローカルの origin/main コミット履歴に追加されています。

よく使われるオプション


git pull <remote>

現在のブランチの指定したリモートにおけるコピーをフェッチして、それをローカルのコピーに即時マージします。これは、git fetch <remote> とそれに続く git merge origin/<current-branch> の実行と同等です。

git pull --no-commit <remote>

既定の呼び出しと同様に、リモートコンテンツはフェッチされますが、新しいマージコミットは作成されません。

git pull --rebase <remote>

前のプルと同じく、git merge を使用してリモート ブランチをローカル ブランチと統合するのではなく、git rebase を使用します。

git pull --verbose

プル中に詳細出力が行われ、ダウンロードされているコンテンツとマージの詳細が表示されます。

git pull の説明


git pull コマンドは Git における svn update に相当すると考えられます。このコマンドは、ローカル リポジトリを中央リポジトリに同期する簡便な方法です。次の図は、プルを実行したときの各々のステップを説明したものです。

git pull

最初はローカル リポジトリが origin と同期されている状態だったものが、git fetch コマンドを実行したことによって、origin の main に最後に確認した時点から進行があったことが明らかになりました。ここで、git merge によってリモート main がローカル main に即時にマージされます。

git pull と同期


git pull は、リモート コンテンツの「同期」に関連する多数のコマンドの 1 つです。git remote コマンドは、同期コマンドが実行されるリモート エンド ポイントを指定するために使用されます。git push コマンドは、リモート リポジトリにコンテンツをアップロードするために使用されます。

git fetch コマンドは、git pull と混同されがちです。どちらも、リモート コンテンツのダウンロードに使用されます。git pullget fetch には安全上の重要な違いがあり、git fetch は「安全」なオプション、git pull は安全ではないオプションと考えられます。git fetch ではリモート コンテンツがダウンロードされ、ローカル リポジトリの状態は変更されません。一方、git pull ではリモート コンテンツがダウンロードされ、そのコンテンツに合わせてローカルの状態の変更が即時に試行されます。これにより、ローカル リポジトリで意図しない競合状態が発生する可能性があります。

リベースを用いたプル


--rebase オプションは、不要なマージ コミットを防止することによって直線的な履歴を確保するために使用できます。多くの開発者はマージよりもリベースを優先します。これは、「他のすべての人が行った変更の上に自分の変更を加えたい」と言っているようなものです。その意味では、git pull--rebase フラグを指定して使用した場合、単純な git pull よりも svn update に似ています。

実際、--rebase フラグを指定したプル操作は非常に一般的なワークフローになっているため、それを行うための専用の設定コマンドが用意されています。

git config --global branch.autosetuprebase always

このコマンドを実行すると、すべての git pull コマンドで統合の際に git merge ではなく git rebase が使用されます。

git pull の例


以下の例は、一般的なシナリオで git pull を使用する方法を示しています。

既定の動作

git pull

git pull の既定の呼び出しの実行は、git fetch origin HEAD および git merge HEAD に相当します (HEAD は現在のブランチをポイントする参照)。

リモートの git pull

git checkout new_feature
git pull <remote repo>

この例では、最初にチェックアウトを実行し、 ブランチに切り替えます。その後、git pull が実行され、 が渡されます。これにより、newfeature ブランチが から暗示的にプルされます。ダウンロードが完了すると、git merge が開始されます。

マージの代わりの git pull リベース

次の例は、リベースを使用した中央リポジトリの main ブランチと同期する方法を示したものです。

git checkout main
git pull --rebase origin

このコマンドを実行すると、他の開発者の作業成果がすべて反映されたものの上にローカルの変更が加えられるようになります。


この記事を共有する

おすすめコンテンツ

次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。

一面のツールを使ってコラボレーションしている人たち

Bitbucket ブログ

DevOps のイラスト

DevOps ラーニング パス

Demo Den アトラシアン・エキスパートによる機能デモ

Bitbucket Cloud が、Atlassian Open DevOps とどのように連携するか

DevOps ニュースレター購読

Thank you for signing up