0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[共同開発] pullではなくてfetch+mergeが使われる理由

Last updated at Posted at 2025-03-05

そもそも

pullとfetchは,リモートの最新状態を,ローカルに反映させるものですが,少し違います.

pull

リモートの最新状態をローカルに取得してきた後,マージをします.

git checkout main  # mainブランチに移動
git pull origin main

ローカルの main に未コミットの変更があると,競合が発生する可能性があります.

fetch

リモートの最新状態を,ローカルに取得してくるだけで,マージはしません.
取得したデータは,下記の保存場所に一旦保存されるだけで,ローカルの現在編集しているデータが変更されることはありません.

データの種類 保存場所
リモートブランチ情報 .git/refs/remotes/origin/
コミットオブジェクト .git/objects/
リモートのHEAD情報 .git/FETCH_HEAD

共同開発においては,fetchで最新状態を取得した後,mergeで統合をするのが一般的です.

リモートのmainをローカルのmainに取り込むばあ

git checkout main
git fetch origin   # リモートの最新情報を取得(適用しない)
git merge origin/main  # リモートの変更をローカルの main に適用

※リモートの別ブランチ(ここではfeature-xyz)をfetchしてから,ローカルのmainに取り込む場合

git checkout main
git fetch origin   # リモートの最新情報を取得(適用しない)
git merge origin/feature-xyz

共同開発でfetch+mergeを使用する理由

共同開発をしていると,たくさんのブランチを切って並行して開発を進める機会が多いです.そのため,ブランチをマージする機会が多くなり,いきなりpullしてしまうとコンフリクトが発生してしまい,面倒なことになってしまうのです.

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?