【Git入門】ローカルリポにリモートリポの内容を反映する(fetch,merge,pullの違い )
0.はじめに
Git入門者向けに、「ローカルリポにリモートリポの内容を反映する方法」を解説します。
本記事の内容に沿って、ハンズオンいただくと以下を習得できます。
- 「ローカルリポジトリにリモートリポジトリの内容を反映する方法」を習得できる
-
git fetch
、git merge
、git 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 pull
はgit fetch
とgit 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 pull
はgit fetch
とgit merge
を一括で実施する(pullを使う場合が多い) - ローカルリポジトリにリモートリポジトリの内容を反映するための、ワークフロー(
git pull
)
一回で覚えるのは難しいと思うので、何度かトライして覚えるで全然大丈夫です。
今後もGitの基本的なワークフローについて解説していきます。
おわりっ!
Discussion