履歴の書き換え

GitGitBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

ようこそ、時をかける Git エクスプローラー!あなたは重要なミッションを託されました。それは、極秘プロジェクトの乱雑なコミット履歴を整理することです。あなたの目標は、新たに習得した Git の力、特にインタラクティブ・リベース(interactive rebasing)の技術を駆使して、混沌としたタイムラインを明確で簡潔な履歴に変えることです。

あなたが過去を書き換える能力を持つ歴史家だと想像してください。あなたの仕事は、一連の散在する出来事をまとめ、一貫性のある物語に再構成することです。まさにそれを、Git のインタラクティブ・リベース機能を使って行うのです。関連するコミットを結合したり、不要なコミットを削除したり、コミットメッセージを書き換えて、プロジェクトの開発に関するより明確なストーリーを語ります。

タイムストリームに飛び込み、洗練された Git の履歴を手に入れる準備はできましたか?それでは、あなたの時間的な冒険を始めましょう!


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BranchManagementGroup -.-> git/log("Show Commits") git/BranchManagementGroup -.-> git/rebase("Reapply Commits") subgraph Lab Skills git/commit -.-> lab-387746{{"履歴の書き換え"}} git/log -.-> lab-387746{{"履歴の書き換え"}} git/rebase -.-> lab-387746{{"履歴の書き換え"}} end

タイムラインの整理

タスク

チャレンジ(Challenge)のリポジトリは ~/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

あなたのミッションには、次のタスクが含まれます。

  1. 最も古い 2 つのコミット("Start secret project" と "Fix typo in project name")を、メッセージ "Initialize secret project" を持つ 1 つのコミットに結合します。
  2. "Add project codename" コミットを "Add project codename: Chronos" にリワード(reword)します。
  3. 最新のコミット("Add project description")はそのままにします。

要件

このミッションを成功させるには、次の要件を遵守してください。

  • すべての操作は、~/project/time-travel-git ディレクトリで実行する必要があります。
  • git rebase -i (インタラクティブ・リベース(interactive rebase)) コマンドを使用して、コミット履歴を整理する必要があります。
  • 最終的な履歴には、元の 4 つではなく、正確に 3 つのコミットが含まれている必要があります。
  • ファイルの内容は変更されないようにしてください。コミット履歴のみを変更します。
  • チャレンジ(Challenge)が完了したら、git log --oneline を実行すると、正しいメッセージを持つ 3 つのコミットが表示されるはずです。

ヒント

チャレンジ(Challenge)を進めるための役立つヒントをいくつか紹介します。

  1. インタラクティブ・リベース(interactive rebase)を使用すると、履歴内のコミットを操作できます。基本的なコマンド形式は次のとおりです。

    git rebase -i <commit>

    ここで <commit> は、変更したい最初のコミットの前のコミットです。最初のコミットから変更するには、次を使用できます。

    git rebase -i --root
  2. インタラクティブ・リベース(interactive rebase)画面には、アクション付きのコミットのリストが表示されます。一般的なアクションは次のとおりです。

    • pick - コミットをそのまま使用します
    • reword または r - コミットを使用しますが、そのメッセージを変更します
    • squash または s - このコミットを前のコミットと結合します
    • fixup または f - squash と同様ですが、このコミットのメッセージを破棄します
  3. コミットを結合するには、2 番目のコミットで squash または fixup のいずれかを使用することをお勧めします。

  4. コミットメッセージを変更するには、reword アクションを使用します。

  5. リベース(rebase)計画を設定したら、エディターを保存して閉じます。Git はプロセスの残りの部分をガイドし、コミットメッセージを編集するために必要に応じて新しいエディターウィンドウを開きます。

  6. リベース(rebase)中に間違いを犯した場合は、いつでも次のようにして中止できます。

    git rebase --abort

    そして、やり直してください。

チャレンジ(Challenge)を完了すると、git log --oneline は次のようになります(コミットハッシュは異なります)。

abc1234 Add project description
def5678 Add project codename: Chronos
ghi9101 Initialize secret project
✨ 解答を確認して練習

まとめ

このチャレンジ(Challenge)では、Git の歴史を巡る時間旅行に出かけました。過去を再構築し、よりクリーンで論理的なコミット履歴を作成できる強力なツールである、インタラクティブ・リベース(interactive rebasing)の技術を習得しました。

コミットを結合し、メッセージをリワード(reword)し、変更を再編成することで、乱雑な一連のイベントを一貫性のある物語に変えました。このスキルは、クリーンで理解しやすい履歴を維持することがコラボレーションとプロジェクト管理を大幅に改善できる、現実世界のプロジェクトで非常に貴重です。

忘れないでください、大いなる力には大いなる責任が伴います。履歴の書き換えは、ローカルブランチまたは個人プロジェクトには役立ちますが、共有ブランチでは慎重に使用する必要があります。共有履歴を変更する前に、必ずチームとコミュニケーションを取ってください。

Git の冒険を続ける中で、これらのスキルを磨き続けてください。履歴を操作する能力は、単に整理整頓するだけでなく、プロジェクトの進化に関する明確なストーリーを作成することです。今後の Git 履歴がクリーンで、マージ(merge)がコンフリクト(conflict)フリーで、コミットが常に意味のあるものになることを願っています!