🐕‍🦺

【Git入門】ローカルリポにリモートリポの内容を反映する(fetch,merge,pullの違い )

2024/05/26に公開

0.はじめに

Git入門者向けに、「ローカルリポにリモートリポの内容を反映する方法」を解説します。

本記事の内容に沿って、ハンズオンいただくと以下を習得できます。

  • 「ローカルリポジトリにリモートリポジトリの内容を反映する方法」を習得できる
  • git fetchgit mergegit pullの違いが理解できる

では、次の章から具体的な解説を進めます!

1.ローカルリポにリモートリポの内容を反映する3つの方法

ローカルリポにリモートリポの内容を反映するには、以下3つの方法があります。

  • git fetch
  • git merge
  • git pull

1.1.git fetch

git fetchはリモートリポからローカルリポに最新情報(リファレンス)を取得するコマンドです。この際、マージはされません。

git fetchコマンドの使い方

$ git fetch <remote_ref>
※<remote_ref>はリモートリポのリファレンス名を指定(例:"origin"など)
※<remote_ref>を省略すると、デフォルトでoriginになる
※情報を取得するだけで、マージはしない
※ローカルリポのremotes/<remote_ref>/<branchname>に情報が更新されていく(git branch -aでリファレンス情報を確認できます。)

$ git fetch origin

1.2.git merge

ローカルリポにリモートリポのブランチを反映させたい場合は、git mergeを利用します。

git mergeコマンドの使い方

$ git merge <branchname>
※マージする前に差分(diff)を確認するとよい

$ git merge origin/main

1.3.git pull

git pullgit fetchgit mergeを組み合わせたものです。

リモートリポからローカルリポに最新情報を取得(fetch)した上で、マージ(merge)も行います。つまり、fetchとmergeを一括で実行してくれるということです。

git pullコマンド使い方

$ git pull <remote_ref> <branchname>
※リモートリポの名前(reference名)は、git remote -vで確認可能。通常はoriginを指定すればOK

$ git pull origin main

普段の業務では、pullしてローカルリポを更新することがほとんどですので、次章からgit pullの具体的な使用例を見ていきます。

2.git pullコマンドの実践

実際に、「リモートリポのmainブランチの情報をローカルリポのmainブランチにpullする方法」を解説します。

  • ローカルリポのmainブランチのREADME.mdは古いまま
  • 基本的にはmainブランチはリモートリポと同期させる
  • pullコマンドは、アクティブブランチにマージするコマンド
  • mainブランチに移動してからgit pullコマンドを使う

2.1.ローカルリポにて、mainブランチに移動する

まず、git branchコマンドで、現状のアクティブブランチを確認します。

$ git branch
  main
* update-readme
$

現状、update-readmeブランチ上にいるので、git checkoutコマンドでmainブランチへ移動します。

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
$
$ git branch
* main
    update-readme
$

再度、git branchコマンドでアクティブブランチがmainになっていることを確認しましょう。

$ git branch
* main
    update-readme
$

以上で、mainブランチへ移動できました。

2.2.リモートリポのmainブランチの情報をローカルリポのmainブランチにpullする

ローカルリポのmainブランチの情報を更新する前に、現状のREADME.mdの中身を確認しておきましょう。

$ cat README.md
# sample-repo
練習用に更新!
$

では、git pullコマンドを実行し、ローカルリポのmainブランチの情報を更新します。

$ git pull origin main

すると、以下のように表示されローカルリポへ反映が完了するはずです。

$ git pull origin main
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), 908 bytes | 302.00 KiB/s, done.
From github.com:username/sample-repo
 * branch            main       -> FETCH_HEAD
   dc6912d..5a53437  main       -> origin/main
Updating dc6912d..5a53437
Fast-forward
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
$

以上で、ローカルリポのmainブランチの更新は完了です。

2.3.ローカルリポのmainブランチのREADME.mdが更新されていることを確認する

再度、README.mdの中身を確認してみると、内容が更新されていることがわかると思います。

$ cat README.md
# sample-repo
Gitの練習用リポジトリ
$

git pullコマンドの実践は以上となります。

3.おわりに

今回は「ローカルリポにリモートリポの内容を反映する方法」を習得するために、以下を学びました。

  • git fetchは、リモートリポの最新情報(リファレンス)をローカルリポへ反映する
  • git mergeはリモートリポ上の他メンバーの作業内容(ブランチ)をローカルリポへ反映する
  • git pullgit fetchgit mergeを一括で実施する(pullを使う場合が多い)
  • ローカルリポジトリにリモートリポジトリの内容を反映するための、ワークフロー(git pull

一回で覚えるのは難しいと思うので、何度かトライして覚えるで全然大丈夫です。

今後もGitの基本的なワークフローについて解説していきます。

おわりっ!

参考サイト

Discussion