Git Merge Origin/Master と Git Pull の違い
この記事では、git merge origin/master
コマンドと git pull
コマンドの違いについて概説します。 2つのコマンドは、リモート リポジトリからの変更を現在のローカル ブランチに統合します。
ただし、後で説明するように、各コマンドは独自に動作し、さまざまなユース ケースがあります。 これは、Git を初めて使用し、2つのコマンドに苦労している場合に適した場所です。
git merge origin/master
と git pull
の違い
まず、各コマンドを分析して重要な違いを導き出します。 git pull
コマンドから始めましょう。
git pull
コマンド
Git のドキュメントによると、デフォルトでは、git pull
コマンドは 2つのコマンドの組み合わせです。
git fetch
コマンドgit merge Fetch_Head
コマンド
git push
コマンドは、リモート リポジトリから変更をフェッチし、git merge
コマンドを呼び出して Fetch_Head
をチェックアウトされたローカル ブランチにマージします。
簡単に言えば、Fetch_Head
はフェッチされたものを追跡する参照です。 すべてのリモート ブランチの先端にコミットを保存します。
git pull
コマンドでは、ローカル ブランチにリモート トラッキング ブランチが必要です。 リモート追跡ブランチは、ローカル ブランチが変更をプルしてプッシュするリモート リポジトリ内のブランチです。
ローカル ブランチ用にリモート トラッキング ブランチを設定していない場合、git pull
コマンド自体は失敗します。 このような状況では、リモート ブランチを指定する必要があります。
git merge origin/master
コマンド
git merge origin/master
は、リモートの master
ブランチから現在のブランチに変更を統合します。 git merge origin/master
コマンド自体は、ローカル ブランチには影響しません。
ローカル リポジトリはリモート リポジトリの変更を認識しないため、最初に git fetch
コマンドを実行する必要があります。
git fetch
コマンドと組み合わせると、git merge origin/master
コマンドは git pull
コマンドのように機能します。 ただし、リモート追跡ブランチは必要ありません。
次の架空のシナリオを考えてみましょう。
私たちのリポジトリには master
ブランチがあります。 編集を行う development
ブランチを作成し、それらを master
にマージして、リモート リポジトリにプッシュします。
同じプロジェクトに取り組んでいる他の開発者は、同じワークフローに従います。
リモートの master
ブランチに新しい変更があり、master
ブランチを更新せずに直接 development
ブランチに変更を加えたいと考えています。 これについてどうすればよいでしょうか?
ローカルの development
ブランチにはリモート トラッキング ブランチがないため、git pull
コマンドは機能しません。
リモート リポジトリから変更を取得し、直接 development
ブランチにマージする必要があります。 ここで、git merge origin/master
コマンドの出番です。
リモートから取得するには、次を実行します。
$ git fetch
これは変更をダウンロードするだけで、何も更新しないことに注意してください。 変更を development
ブランチにマージするには、次を実行します。
$ git merge origin/master
一方、ローカルの master
ブランチでチェックアウトした場合、git pull
コマンドは機能し、master
ブランチを更新します。
ブランチにリモート追跡ブランチがある場合は、git pull
コマンドを使用して変更をローカル ブランチに統合します。 一方、git merge origin/master
コマンドは、リモートの master
ブランチから現在のローカル ブランチへの変更を組み込みます。
コマンドを呼び出す前に、リモート リポジトリから取得する必要があります。
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn関連記事 - Git Merge
- Git Cherry-Pick vs マージ ワークフロー
- Git Merge Master と Git Merge Origin/Master の違い
- Git マージされていないファイル
- Git で競合を解決した後にマージを完了する
- Git の 2つのブランチの最近の共通の祖先を特定する