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?

Git rebase の使い方を、たくさんの実例で初心者にも分かりやすく解説してみた!

Posted at

前書き

Git rebase って、使うのがちょっと怖いと思ったことありませんか?
Gitを使った開発の中で、rebaseコマンドは非常に強力ですが、「履歴が書き換えられる」「競合が増える」「チームメンバーに怒られた」など、怖い噂を聞いて敬遠している方も多いのではないでしょうか。

でも実は、Git rebaseを正しく理解すれば、mergeよりも履歴を綺麗に整理できたり、効率的に開発を進められる場面がたくさんあります。
この記事では、Git rebaseの基本から実践的な活用方法まで、初心者にもわかりやすく解説します。

また、git mergeと比較して、git rebaseを使用する上での注意点や、使いどころの判断基準についても触れます。
「怖いから使わない」ではなく、「安全に使いこなす」ための方法をこの記事でマスターしましょう!

基本概念:git rebasegit merge の違い

1. git merge

  • 目的: ブランチを統合する。
  • 特徴: 履歴を変更せず、統合時に「マージコミット」が作成される。
  • 結果: 履歴が「分岐と統合」の形で残る。

2. git rebase

  • 目的: 一つのブランチの変更を別のブランチの先頭に適用する。
  • 特徴: 履歴を書き換えるため、より「直線的」な履歴を作成できる。
  • 結果: 履歴が「一本の線」のように見える。

実例 1: チーム開発でのブランチの整理

シナリオ:

  • あなたのチームでは、feature-A ブランチで新機能を開発中。
  • しかし、その間に main ブランチが更新されてしまった。
  • 今、自分の feature-Amain にマージする前に最新の状態に合わせたい。

解決方法: git rebase main

# 1. mainブランチを最新に更新
git checkout main
git pull origin main

# 2. feature-Aに移動
git checkout feature-A

# 3. rebaseを実行
git rebase main

効果:

  • feature-A の変更が main の最新のコミットに適用されます。
  • 履歴が「一本の線」になります。

比較: git merge を使った場合

git checkout feature-A
git merge main
  • マージコミットが追加され、履歴が「分岐と統合」の形で残ります。

どちらを選ぶべき?

  • merge: コミット履歴を完全に残したい場合。
  • rebase: 履歴を整理してクリーンに保ちたい場合。

実例 2: コミットの整理

シナリオ:

  • あなたのブランチには、開発中に行った細かいコミットがたくさんある。
  • 他の人に共有する前に、これらを1つの意味のあるコミットにまとめたい。

解決方法: インタラクティブリベース

git checkout feature-A

# 過去3つのコミットを編集する
git rebase -i HEAD~3

エディタが開き、次のようなリストが表示されます:

pick abc123 First commit
pick def456 Second commit
pick ghi789 Third commit

pick を以下のように変更します:

pick abc123 First commit
squash def456 Second commit
squash ghi789 Third commit

結果、3つのコミットが1つにまとまります。


実例 3: フォークしたリポジトリを最新に保つ

シナリオ:

  • オープンソースプロジェクトをフォークして、あなたのリポジトリで作業を進めている。
  • オリジナルのリポジトリ(upstream)が更新されたので、それを取り込む必要がある。

解決方法: rebase

# 1. upstreamリモートを追加
git remote add upstream https://github.com/original/repo.git

# 2. upstreamの変更を取得
git fetch upstream

# 3. 自分のmainをupstreamのmainに合わせる
git checkout main
git rebase upstream/main

効果:

  • オリジナルのリポジトリの変更を取り込む際に、クリーンな履歴を保てます。

実例 4: コンフリクトの解消

シナリオ:

  • git rebase を実行中にコンフリクトが発生した。

解決方法:

  1. コンフリクトを解消します。
# ファイルを編集してコンフリクトを解消
git add conflict-file.txt
  1. リベースを続行:
git rebase --continue
  1. 必要に応じて作業を中断:
git rebase --abort

実例 5: チームに迷惑をかけないリベース

ポイント:

  • リベースは履歴を書き換えるため、共有されたブランチでリベースを行うと他の人に迷惑をかけることがあります。

ベストプラクティス:

  • main や共有されているブランチではなく、自分のローカルブランチでのみリベースを使う。
  • 既にプッシュした変更は、可能な限り merge を使う。

まとめ

  1. git mergegit rebase の選択

    • 履歴を残したい場合:merge
    • クリーンな履歴が欲しい場合:rebase
  2. git rebase の活用場面

    • 履歴を整理したいとき。
    • 最新のブランチに変更を適用したいとき。
    • コミットをまとめたいとき。
  3. 注意点

    • リベースは履歴を書き換えるので慎重に使用する。
    • 共有ブランチではリベースしない。

開発現場では rebasemerge を適切に使い分け、クリーンな履歴と効率的なコラボレーションを実現しましょう!

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?