0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Git における pull vs fetch / merge vs rebase の学習メモ

Last updated at Posted at 2025-03-24

git pull vs fetch

git pull の特徴

git pull = git fetch + git merge

チェックアウト中のローカルブランチ(LB)に対し、リモートブランチ(RB)から取得した変更をマージする

引数なしで実行すると、追跡関係に基づいて自動でリモートとローカルがマージされる

git fetch の特徴

すべてのリモートブランチの情報をローカル追跡ブランチ(RTB)に取得するが、ローカルブランチには影響しない

git pull 前に現在の状況を把握するのに使える

push 前にリモートとローカルの差分を確認する用途にも便利

💬 自分の感想:

fetch + git status で対応するリモートブランチを正しく追跡できているか確認できるので、基本的に fetch のほうが安全そう。

git merge vs rebase

merge の特徴

3-way マージ(通常のマージ)と Fast-Forward マージの2種類がある

履歴が分岐している場合、マージコミットが生成される(3-way マージ)

3-wayマージでは、共通の親を基点に両方のブランチの差分を統合し、新たなマージコミットが生成される。

FFマージでは、対象ブランチが現在のブランチに直列に並んでいるとき、単にポインタを進めるだけ(マージコミットは生成されない)。

・強み:

変更の実態が正確に残るため、履歴から変更内容を追いやすい

rebase の特徴

分岐していたコミット履歴を直線的に改変する

共有のブランチと分岐間の変更を再適用(リプレイ)するための新しいコミットを作成する

結果的に、新しいブランチはその再適用されたコミット群の先端を指す

・強み:

コミット履歴がキレイになる(直線的)

・ 弱み:

リモート/ローカル間の不整合を起こしかねない

💬 自分の感想:

履歴に手を加えることに違和感があるので、merge の方が好き。
シンプルに履歴の不整合が起こるのも怖い。

おまけ:pullが追跡関係にかかわりなくチェックアウト中のブランチに対してマージを行う様子
スクリーンショット 2025-03-25 022813.png

スクリーンショット 2025-03-25 022843.png

0
0
1

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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?