履歴のためのインタラクティブRebase
インタラクティブRebaseを使ってコミット履歴を書き換え、プッシュ前にコミットの統合、並べ替え、メッセージの編集を行います。
「履歴のためのインタラクティブRebase」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
インタラクティブリベースを始める
強力なGitのツール、インタラクティブリベースへようこそ。これは、他の人と共有する前に、プロジェクトのコミット履歴を書き換えるための機能です。
コミットのためのタイムマシンのようなものだと考えてください。変更を整理、統合、並べ替えすることで、作業内容を明確で直線的な履歴に整えられます。
履歴を整理する理由
なぜ履歴を書き換える必要があるのでしょうか。
- 明確さ:プロジェクトのコミットログを読みやすく、理解しやすくできます。
- 簡潔さ:小さな段階的コミットを、意味のある1つの変更にまとめられます。
- デバッグ:履歴が整理されていると、
git bisectのようなツールで、バグが混入した箇所を見つけやすくなります。 - よりよいプルリクエスト:整理された変更内容を共同作業者に提示できます。
インタラクティブリベースの開始
インタラクティブリベースを開始するには、git rebase -iコマンドを使います。どこまでさかのぼるかを指定する必要があります。
たとえば、現在のブランチの直近3つのコミットをリベースする場合は、次のように実行します。
git rebase -i HEAD~3これにより、直近3つのコミットと使用可能なコマンドが表示されたエディターが開きます。
リベースエディターのコマンド
インタラクティブリベースを開始すると、Gitはコミットの一覧と手順が記載されたテキストエディターを開きます。各コミットは、次のいずれかのコマンドで始まります。
pick:コミットをそのまま使用します。reword:コミットを使用しますが、メッセージを編集します。edit:コミットを使用しますが、変更を修正するために処理を一時停止します。squash:直前のコミットと統合し、メッセージもまとめます。fixup:直前のコミットと統合しますが、このコミットのメッセージは破棄します。drop:コミットを完全に削除します。
例:コミットメッセージの変更
コミットメッセージに入力ミスがあるとします。rewordを使って修正できます。変更したいコミットの行で、pickをrewordに変更します。
pick 5a6b7c8 Add new feature pick 1d2e3f4 Fix typo in docs reword 9g0h1i2 Implement login screen
エディターを保存して閉じると、Gitは9g0h1i2のコミットメッセージを編集するよう求めます。
例:コミットの統合
関連する小さなコミットをいくつも作成し、それらを1つにまとめたい場合があります。そのようなときはsquashを使います。
pick a1b2c3d Initial feature commit squash e4f5g6h Add more details fixup i7j8k9l Fix small bug
ここでは、e4f5g6hがa1b2c3dに統合され、両方のメッセージがまとめられます。i7j8k9lもa1b2c3dに統合されますが、そのメッセージは破棄されます(fixup)。
例:コミットの削除
不要になった実験的なコミットがある場合は、履歴からdropできます。pickをdropに変更するか、その行を完全に削除してください。
pick 1122334 Initial setup drop 5566778 Test experimental feature pick 9900112 Add user authentication
保存すると、コミット5566778はブランチの履歴から完全に削除されます。
例:コミットの並べ替え
コミットの順序を変更することもできます。エディターで行を切り取って貼り付けるだけで、順序を入れ替えられます。Gitは新しい順序で変更を適用します。
元の順序:
pick abcdef1 Add feature A pick 1234567 Add feature B
並べ替え後:
pick 1234567 Add feature B pick abcdef1 Add feature A
コミットが互いの変更に依存している場合、順序を変えるとコンフリクトが発生する可能性があるため、注意してください。
鉄則:共有された履歴をリベースしない
これは非常に重要です。すでに共有リモートリポジトリ(GitHubやGitLabなど)へプッシュされ、他の人がプルしている可能性のあるコミットは、決してリベースしないでください。
リベースを行うと、コミットIDが書き換えられます。他の人が元のコミットを基に作業している場合、リベース後のコミットはまったく別の履歴として扱われるため、関係者全員に大きなコンフリクトと混乱が生じます。
リベースするのは、自分のローカルブランチだけに存在するコミットに限定してください。
リベースコマンドの確認
3つのコミット、A (Initial)、B (Minor fix)、C (Refactor)があるとします。BをAに統合し、Aの元のメッセージを残したうえで、Cはそのままにしたい場合、インタラクティブリベースエディターではどのコマンドを使いますか(古い順から新しい順)。
インタラクティブリベースのまとめ
強力なgit rebase -iコマンドについて学びました。
- ローカルのコミット履歴を書き換えられます。
- メッセージを
rewordしたり、コミットをsquashまたはfixupしたり、不要な変更をdropしたり、コミットの順序を変更したりできます。 - 鉄則を常に覚えておきましょう。共有リモートへすでにプッシュされたコミットは、決してリベースしないでください。
インタラクティブリベースを使いこなすと、プロジェクトの履歴を整理し、理解しやすく保てます。
よくある質問
「履歴のためのインタラクティブRebase」レッスンは無料ですか?
はい。「履歴のためのインタラクティブRebase」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「履歴のためのインタラクティブRebase」で何を学びますか?
インタラクティブRebaseを使ってコミット履歴を書き換え、プッシュ前にコミットの統合、並べ替え、メッセージの編集を行います。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「履歴のためのインタラクティブRebase」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- マージコンフリクトの手動解決
- 履歴のためのインタラクティブRebase
- コミットのCherry-pick
- Git Rerere で競合解決を再利用する