タイムラインの整理
タスク
チャレンジ用のリポジトリが ~/project/time-travel-git に用意されています。以下のコマンドを実行して、初期のコミット履歴を確認してください。
cd ~/project/time-travel-git
git log --oneline
以下のような 4 つのコミットが表示されるはずです(コミットハッシュは環境によって異なります)。
886c6ad (HEAD -> master) Add project description
3a87b84 Add project codename
6b4cbb9 Fix typo in project name
0d71e5e Start secret project
あなたの任務は、以下のタスクを遂行することです。
- 最も古い 2 つのコミット("Start secret project" と "Fix typo in project name")を 1 つのコミットに統合し、メッセージを "Initialize secret project" に変更してください。
- "Add project codename" というコミットのメッセージを "Add project codename: Chronos" に書き換えてください。
- 最新のコミット("Add project description")はそのまま維持してください。
要件
この任務を成功させるために、以下の要件を遵守してください。
- すべての操作は
~/project/time-travel-git ディレクトリ内で行うこと。
- コミット履歴の整理には必ず
git rebase -i(インタラクティブ・リベース)コマンドを使用すること。
- 最終的な履歴は、元の 4 つではなく、正確に 3 つのコミットになっていること。
- ファイルの内容自体は変更しないこと。変更するのはコミット履歴のみです。
- チャレンジ完了後、
git log --oneline を実行した際に、正しいメッセージを持つ 3 つのコミットが表示されること。
ヒント
チャレンジを進める上でのヒントをいくつか紹介します。
-
インタラクティブ・リベースを使用すると、履歴内のコミットを操作できます。基本的なコマンド形式は以下の通りです。
git rebase -i <commit>
ここで <commit> は、修正したい最初のコミットの「一つ前」のコミットを指定します。最初のコミットから修正したい場合は、以下のフラグを使用できます。
git rebase -i --root
-
インタラクティブ・リベースの画面では、コミットの一覧とアクションが表示されます。主なアクションは以下の通りです。
pick - コミットをそのまま使用する
reword または r - コミットを使用するが、メッセージのみ変更する
squash または s - このコミットを前のコミットに統合する
fixup または f - squash と同様だが、このコミットのメッセージは破棄する
-
コミットを統合するには、2 番目のコミットに対して squash または fixup を使用するとよいでしょう。
-
コミットメッセージのみを変更したい場合は、reword アクションを使用します。
-
リベースの計画(アクションの指定)を設定したら、エディタを保存して閉じます。Git が残りのプロセスを案内し、必要に応じてコミットメッセージ編集用の新しいエディタウィンドウを開きます。
-
リベース中に間違いに気づいた場合は、いつでも以下のコマンドで中断してやり直すことができます。
git rebase --abort
例
チャレンジ完了後、git log --oneline の結果は以下のようになるはずです(コミットハッシュは異なります)。
abc1234 Add project description
def5678 Add project codename: Chronos
ghi9101 Initialize secret project