目次

  1. Git pullの使い方
    1. git pull の仕組み
    2. git pull の共通オプション
    3. git pull に関するディスカッション
    4. Git のプルと同期
    5. pull と rebase
  2. Git pull の例
    1. デフォルトの動作
    2. リモート ウェアハウスを更新する
    3. git pull + rebase

Git pullの使い方

git pull コマンドは、更新されたコンテンツをリモート ウェアハウスからダウンロードし、対応するコンテンツをローカル ウェアハウスに即座に更新するために使用されます。 Git の共同ワークフローでは、リモート リポジトリからローカル リポジトリに変更をマージすることが非常に一般的です。 git pull コマンドは、実際には他の 2 つのコマンド、最初に git fetch、次に git merge を組み合わせたものです。 git pull コマンド実行の最初のフェーズでは、現在のローカル HEAD ポインタが指すブランチ上で git fetch が実行されます。 元の更新コンテンツのダウンロードが完了すると、git pull はマージ プロセスに入ります。 マージ操作により新しい commit が作成され、それに応じて HEAD ポインタがこの新しい commit を指すように更新されます。

git pull の仕組み

git pull このコマンドは、最初に git fetch コマンドを実行します。このコマンドは、リモート ウェアハウスのコンテンツをダウンロードするために使用されます。 次に、git merge コマンドを実行してリモート コンテンツをマージすると、マージの結果としてローカルにマージ コミットが作成されます。 この一連のダウンロードとマージのプロセスをより深く理解するには、次の図に示すプロセスを参照してください。 私たちのウェアハウスに main というブランチと、origin というエイリアスを持つリモート ウェアハウスがあるとします。

このシナリオでは、git pull は、ローカル ウェアハウスのメイン ブランチとリモート ウェアハウスのメイン ブランチが分岐する revision ノードから開始され、リモート ウェアハウスをダウンロードします。ローカル倉庫に対応するすべての変更。 この例では、このノードは D の次のノード、つまり E です。 git pull は、フォーク後のリモート commits (A-B-C) をダウンロードします。 次に、プル プロセスは、これらのフォークのリモート変更を含む commit を作成し、これらの変更をローカル リポジトリにマージします。

上の図では commit H を確認できます。 この commit は新しく追加された commit で、リモート ウェアハウスの A-B-C 送信ノードとマージ後のログ情報が含まれます。 この例は、git pull で使用できるいくつかのマージ戦略のうちの 1 つです。 --rebase オプションが git pull コマンドに渡された場合、マージ戦略は直接マージではなくリベース マージに変更されます。 次の例は、rebase マージされた pull コマンドがどのように機能するかを示します。 以下の例の作業シーンが最初の図のシーンと一致しており、同じシーンで git pull --rebase を実行したとします。

上の図に示すように、rebase とマージされた pull コマンドが新しい H commit を作成していないことがわかります。 逆に、リベース処理では、リモート ウェアハウスの A-B-C の 3 つのコミットがローカル ウェアハウスにコピーされ、ローカル ウェアハウスのメイン ブランチの送信履歴が並べ替えられ、ローカルの新しい変更 (E-F-G) )分岐点以降は遠隔倉庫へ配置ノードC以降

git pull の共通オプション

git pull <remote>

指定されたリモート ウェアハウスをローカル ウェアハウスにダウンロードし、すぐにマージします。 このコマンドは、git fetch <remote> の後に git merge <remote>/<current-branch> を実行するのと同じ効果があります。

git pull --no-commit <remote>

デフォルトの呼び出しと同様に、リモート コンテンツをダウンロードしてマージしますが、マージはコミットしません。

git pull --rebase <remote>

前のプル操作と一致していますが、リモート ブランチをローカル ブランチにマージするために git merge 操作が使用されず、git rebase が使用される点が異なります。 。

git pull --verbose

--verbose オプションを使用すると、ダウンロードの内容とマージ プロセスの詳細が表示されます。

git pull に関するディスカッション

git pull は、リモート ウェアハウスの上流の変更をローカル ウェアハウスに同期するために使用されます。 次の図は、プル操作プロセスのさまざまなステップを詳細に示しています。

これが、最初の部分で説明した完全なプロセスです。

Git のプルと同期

git pull は、リモート コンテンツを同期するための git の多くのコマンドの 1 つです。 git remote コマンドは、すべての同期操作コマンドが参照するリモート ウェアハウスを指定するために使用されます。 git Push コマンドは、コンテンツをリモート ウェアハウスにアップロードするために使用されます。

git fetch は、git pull と混同される可能性があります。 どちらもリモート コンテンツをダウンロードするために使用されます。 最も重要な違いの 1 つはセキュリティです。 いずれの場合も、git fetch コマンドはより安全なオプションとみなされますが、git pull はそうではありません。 その理由は、git fetch がローカル ウェアハウスの状態を変更せずにリモート コンテンツをダウンロードするだけだからです。 対応する git pull コマンドは、リモート コンテンツをダウンロードした後、すぐに新しいコンテンツをローカル ウェアハウス ブランチに適用しようとします。これにより、ローカル ウェアハウスのステータスが変更されます。 このアクションにより、ローカル リポジトリで誤って競合が発生する場合があります。

pull と rebase

--rebase オプションを追加しても追加のマージ コミットは生成されないため、コミット履歴全体が線形になることが保証されます。 多くの開発者は、マージよりもリベースを使用することを好みます。これは、後者は「他の人がすでにコミットした変更の上に自分の変更を置きたい」ためです。 このプロセスは、多くのコラボレーション シナリオにおいてより自然に見えます。

実際、pull --rebase ワークフローは非常に一般的であるため、git には専用の設定項目があります。

git config --global branch.autosetuprebase always

上記のコマンドを実行すると、すべての git pull コマンドは、git merge ではなく git rebase の形式でリモート変更を統合します。 。

Git pull の例

次の例は、git pull の一般的な操作を示しています。

デフォルトの動作

git pull

デフォルトの git pull コマンドを実行する効果は、最初に git fetchorigin HEAD を実行し、次に git merge HEAD を実行するのと同じです。 HEAD は、ローカルの現在のブランチへの Reference を指します。

リモート ウェアハウスを更新する

git checkout new_feature
git pull <remote repo>

この例では、まず new_feature ブランチをチェックアウトして切り替えます。 その後、リモートを渡す git pull コマンドを実行します。 これにより、<remote repo> の new_feature ブランチのコンテンツがダウンロードされます。 ダウンロードが完了すると、git merge 操作が開始され、リモートの変更がローカルの new_feature ブランチにマージされます。

git pull + rebase

次の例は、リベースを使用してリモート ウェアハウスの main ブランチを同期および更新する方法を示しています。

git checkout main
git pull --rebase origin

上記のコマンドを実行すると、ローカル コミットがメイン ブランチの他の全員のコミットの上に配置されます。