RebaseとMergeの比較
RebaseとMergeの違いを比較し、クリーンで直線的な履歴を保つためにそれぞれを使うタイミングを学びます。
「RebaseとMergeの比較」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
MergeとRebase、どちらを選ぶか
Gitで作業していると、featureブランチとmainのように、自分のブランチが別のブランチから分岐していることがあります。
それらの変更をどのように統合すればよいでしょうか。Gitには、主にマージとリベースという2つの方法があります。どちらも統合を実現しますが、その方法は根本的に異なるため、プロジェクトの履歴も異なるものになります。
マージ:履歴の統合
マージは、Gitで変更を統合する標準的な方法です。あるブランチを別のブランチにマージすると、Gitは元のブランチの内容を取り込み、対象ブランチと統合します。
マージの大きな特徴は、新しいマージコミットを作成することです。このコミットには親コミットが2つあり、分岐していた2つの履歴が統合されたことが明確に示されます。両方のブランチの履歴はそのまま保持されます。
Gitでマージを実行する
簡単なマージを見てみましょう。featureブランチを作成してコミットを追加し、その後mainにマージします。
git init my_merge_project
cd my_merge_project
echo "Initial content" > file.txt
git add .
git commit -m "Initial commit"
git branch feature
git checkout feature
echo "Feature A" >> feature.txt
git add .
git commit -m "Add feature A"
git checkout main
echo "Main update" >> main.txt
git add .
git commit -m "Update main"
git merge feature
git log --oneline --graphマージのメリットとデメリット
マージは共有ブランチに対して簡単かつ安全に行えますが、履歴が「複雑」になることがあります。
- メリット:
- コミットの正確な履歴を保持できます。
- 既存のコミットを書き換えないため、非破壊的です。
- 使い方や仕組みがシンプルです。
- デメリット:
- マージコミットが増え、履歴が「ノイジー」になることがあります。
- 多くのブランチがマージされると、グラフが複雑に見えることがあります。
リベース:履歴の書き換え
リベースはマージの代替手段であり、コミットの一連の流れを新しいベースコミットに移動または統合することで変更を取り込みます。マージコミットを作成する代わりに、プロジェクトの履歴を書き換えます。
具体的には、featureブランチのコミットを対象ブランチの最新コミットの上に「再適用」します。これにより、そこから作業を始めたように見える、余分なマージコミットのない直線的な履歴が作成されます。
Gitでリベースを実行する
では、同じ状況でリベースを試してみましょう。featureブランチをmainの上にリベースします。
featureブランチのコミットがmainの最新コミットの上に再適用され、その後、fast-forwardマージによってmainがそのコミットを指すようになることに注目してください。
git init my_rebase_project
cd my_rebase_project
echo "Initial content" > file.txt
git add .
git commit -m "Initial commit"
git branch feature
git checkout feature
echo "Feature B" >> feature.txt
git add .
git commit -m "Add feature B"
git checkout main
echo "Main update 2" >> main.txt
git add .
git commit -m "Update main 2"
git checkout feature
git rebase main
git checkout main
git merge feature
git log --oneline --graphリベースのメリットとデメリット
リベースを使うと履歴はきれいになりますが、共有ブランチについて重要な注意点があります。
- メリット:
- きれいで直線的なプロジェクト履歴を作成できます。
- コミット履歴を確認しやすく、理解しやすくなります。
- 統合前にコミットを整理(squashや並べ替え)できます。
- デメリット:
- コミット履歴を書き換えます。
- すでに共有(パブリック)リモートリポジトリへプッシュしたコミットに使うと危険です。
MergeとRebaseの比較
主な違いを簡単にまとめます。
- Merge:
- 新しいマージコミットを作成します。
- 完全で正確な履歴を保持します。
- 非破壊的です。
- グラフが複雑になることがあります。
- Rebase:
- マージコミットを作成せず、履歴を書き換えます。
- 直線的な履歴になります。
- 破壊的です(コミットIDが変わります)。
- グラフが非常にすっきりします。
戦略を選ぶ
では、どのような場合にどちらを使えばよいのでしょうか。
- Mergeを使う場合:
- パブリックまたは共有ブランチ(例:
main、develop)で作業するとき。 - プロジェクトの正確な履歴を保持する必要があるとき。
- 分岐していた履歴が統合された箇所を明示したいとき。
- Rebaseを使う場合:
- プッシュ前のプライベートな機能ブランチで作業するとき。
- きれいで直線的な履歴にしたいとき。
- 統合前に機能ブランチのコミット(例:squashや並べ替え)を整理したいとき。
鉄則:共有リモートリポジトリにすでにプッシュしたコミットは、決してリベースしないでください。共有履歴をリベースすると、共同作業者に大きな混乱を招く可能性があります。
理解度チェック:MergeとRebase
Gitにおける2つの主要な統合方法の特徴について考えてみましょう。
まとめ:MergeとRebase
このレッスンでは、変更を統合するGitの基本的な2つの方法、マージとリベースについて学びました。
- マージは新しいマージコミットによって履歴を統合し、元のすべてのコミットを保持します。
- リベースは履歴を書き換え、コミットを移動して直線的な流れを作ります。
チームのワークフローに応じて適切に選択し、鉄則であるパブリックな履歴は決してリベースしないことを覚えておきましょう。この理解は、きれいで協力しやすいGitワークフローを維持するうえで重要です。
よくある質問
「RebaseとMergeの比較」レッスンは無料ですか?
はい。「RebaseとMergeの比較」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「RebaseとMergeの比較」で何を学びますか?
RebaseとMergeの違いを比較し、クリーンで直線的な履歴を保つためにそれぞれを使うタイミングを学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「RebaseとMergeの比較」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- フィーチャーブランチワークフロー
- Gitflowワークフロー入門
- RebaseとMergeの比較
- トランクベース開発