Gitのリベース(Rebase)とCherry-pickの実践

1. はじめに

Gitを使った開発では、コードの変更履歴を適切に管理することが重要です。特に、リベース(Rebase)Cherry-pick は、履歴を整理しながら特定の変更を適用するのに役立つ強力な機能です。

本記事では、以下の4つのポイントを中心に、実践的なGit操作を解説します。

  • RebaseとMergeの違いを理解する
  • インタラクティブリベースでコミット履歴を整理する
  • Cherry-pickを使って特定のコミットを適用する
  • Rebase操作で発生するコンフリクトの解消方法

これらのスキルを身につけることで、Gitの履歴をよりクリーンに保ち、開発の効率を向上させることができます。


2. RebaseとMergeの違いを理解する

Gitでは、ブランチを統合する 方法として MergeRebase の2つが存在します。それぞれの違いを明確に理解し、適切に使い分けることが重要です。

MergeRebase
特徴ブランチを統合し、マージコミットを作成ブランチの変更履歴を付け替える
履歴マージコミットが増えるため、分岐の形が残る直線的な履歴になり、よりシンプル
用途チーム開発での履歴保持が必要な場合履歴を整理し、クリーンな状態を保ちたい場合

例:Mergeの動作

git checkout main
git merge feature-branch

例:Rebaseの動作

git checkout feature-branch
git rebase main

Rebaseは履歴を変更するため、公開リポジトリの共有ブランチでの使用は避ける のが一般的です。


3. インタラクティブリベースでコミット履歴を整理する

インタラクティブリベース(Interactive Rebase) を使うと、過去のコミットを編集・統合・削除でき、履歴を整理できます。

インタラクティブリベースの基本操作

以下のコマンドで、直近の3つのコミットを編集できます。

git rebase -i HEAD~3

実行すると、以下のような画面が表示されます。

pick 123abc 修正1
pick 456def 修正2
pick 789ghi 修正3

この pick を変更することで、以下の操作が可能です。

コマンド動作
pickそのまま適用
rewordコミットメッセージを変更
editコミット内容を変更
squash前のコミットと統合
dropコミットを削除

例えば、以下のように変更すると、2つのコミットが1つにまとまります。

pick 123abc 修正1
squash 456def 修正2
pick 789ghi 修正3

変更を保存すると、統合されたコミットメッセージを編集できます。


4. Cherry-pickを使った特定コミットの適用

Cherry-pick は、あるブランチの特定のコミットだけを別のブランチに適用する機能です。

Cherry-pickの基本操作

コミットのハッシュ(例:abc123)を指定して適用します。

git checkout main
git cherry-pick abc123

これにより、該当コミットのみをmainブランチに取り込む ことができます。

複数のコミットをCherry-pickする

git cherry-pick abc123 def456

または、コミット範囲を指定することも可能です。

git cherry-pick abc123^..def456

これを活用することで、必要な変更だけを取り込むことができます。


5. Rebase操作で発生するコンフリクトの解消法

Rebaseの最中に競合(コンフリクト)が発生すると、以下のようなメッセージが表示されます。

CONFLICT (content): Merge conflict in file.txt

この場合、次の手順で解決します。

コンフリクトの解決手順

  1. git status でコンフリクトしたファイルを確認
  2. 該当ファイルを編集して修正
  3. 修正後、ファイルをステージングbashコピーする編集するgit add file.txt
  4. git rebase --continue でRebaseを継続
  5. 必要に応じて、git rebase --abort で中断も可能

コンフリクトを適切に解消すれば、スムーズにRebaseを完了できます。


6. まとめ

本記事では、GitのRebaseCherry-pick の活用法について解説しました。

RebaseとMergeの違い を理解し、適切に使い分ける
インタラクティブリベース を活用して履歴を整理する
Cherry-pick で特定のコミットだけを適用する
Rebase時のコンフリクトを解決 するスキルを身につける

これらをマスターすることで、Gitの履歴をクリーンに保ち、より効率的な開発が可能になります。

SHARE