Git のコミットが取り消されたかどうかを確認する方法

GitGitBeginner
今すぐ練習

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

はじめに

この実験では、Git のコミットが取り消されたかどうかを識別する方法を学びます。git log コマンドを使用して取り消しコミットを見つけ、git show を利用してこれらの取り消しの詳細を検証する方法を探ります。最後に、取り消されていないコミットを調べ、それらの履歴と内容の違いを理解します。この実践的な演習では、サンプルプロジェクトの履歴を作成する手順を案内します。これには、後で取り消されるコミットも含まれ、取り消されたコミットを識別および検証するテクニックを練習することができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/BranchManagementGroup(["Branch Management"]) git/BasicOperationsGroup -.-> git/add("Stage Files") git/BasicOperationsGroup -.-> git/commit("Create Commit") git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/BranchManagementGroup -.-> git/log("Show Commits") subgraph Lab Skills git/add -.-> lab-560064{{"Git のコミットが取り消されたかどうかを確認する方法"}} git/commit -.-> lab-560064{{"Git のコミットが取り消されたかどうかを確認する方法"}} git/diff -.-> lab-560064{{"Git のコミットが取り消されたかどうかを確認する方法"}} git/log -.-> lab-560064{{"Git のコミットが取り消されたかどうかを確認する方法"}} end

git log を実行して取り消しコミットを見つける

このステップでは、git log を使用して取り消されたコミットを見つける方法を学びます。コミットを取り消すとは、以前のコミットで導入された変更を元に戻す新しいコミットを作成することを意味します。これは、間違いを犯した場合に、元のコミットの履歴を失うことなく簡単に取り消すために便利です。

まず、プロジェクトディレクトリにいることを確認しましょう。ターミナルを開き、my-time-machine ディレクトリに移動します。

cd ~/project/my-time-machine

次に、いくつかのコミットを作成してプロジェクトの履歴をシミュレートしましょう。これには、後で取り消すコミットも含まれます。

最初のファイルを作成します。

echo "Initial content" > file1.txt
git add file1.txt
git commit -m "Add file1"

以下のような出力が表示されるはずです。

[master (root-commit) a1b2c3d] Add file1
 1 file changed, 1 insertion(+)
 create mode 100644 file1.txt

次に、さらにコンテンツを追加し、別のコミットを作成しましょう。

echo "Adding more content" >> file1.txt
git add file1.txt
git commit -m "Add more content to file1"

以下のような出力が表示されるはずです。

[master 4e5f6g7] Add more content to file1
 1 file changed, 1 insertion(+)

次に、後で取り消すコミットを作成しましょう。

echo "This commit will be reverted" > file2.txt
git add file2.txt
git commit -m "Add file2 (will be reverted)"

以下のような出力が表示されるはずです。

[master 8h9i0j1] Add file2 (will be reverted)
 1 file changed, 1 insertion(+)
 create mode 100644 file2.txt

では、最後のコミットを取り消しましょう。git revert HEAD を使用して、最新のコミットを取り消すことができます。

git revert HEAD --no-edit

--no-edit フラグは、Git にエディタを開かずに自動的に取り消しコミットメッセージを作成するよう指示します。以下のような出力が表示されるはずです。

[master k2l3m4n] Revert "Add file2 (will be reverted)"
 1 file changed, 1 deletion(-)
 delete mode 100644 file2.txt

素晴らしい!これで、「Add file2 (will be reverted)」コミットの変更を取り消すコミットを作成しました。

次に、git log を使用してコミット履歴を表示し、取り消しコミットを見つけましょう。

git log --oneline

以下のような出力が表示されるはずです。

k2l3m4n (HEAD -> master) Revert "Add file2 (will be reverted)"
8h9i0j1 Add file2 (will be reverted)
4e5f6g7 Add more content to file1
a1b2c3d Add file1

コミットメッセージ「Revert 'Add file2 (will be reverted)'」に注目してください。これは、このコミットが以前のコミットの取り消しであることを明確に示しています。--oneline フラグを使用して git log を実行すると、コミット履歴の概要をすばやく確認し、メッセージから取り消しコミットを識別することができます。

git show を使用して取り消しを検証する

このステップでは、git show コマンドを使用して取り消しコミットの詳細を調べ、元のコミットの変更が正しく取り消されたことを検証します。git show コマンドは、コミット、タグ、ブロブなどの Git オブジェクトを調査するための強力なツールです。

まず、~/project/my-time-machine ディレクトリにいることを確認しましょう。

cd ~/project/my-time-machine

次に、取り消しコミットのコミットハッシュが必要です。これは、前のステップの git log --oneline の出力から取得できます。一番上に表示されているコミットが該当します。たとえば、git log --oneline の出力が以下のようであった場合:

k2l3m4n (HEAD -> master) Revert "Add file2 (will be reverted)"
8h9i0j1 Add file2 (will be reverted)
4e5f6g7 Add more content to file1
a1b2c3d Add file1

取り消しコミットのコミットハッシュは k2l3m4n です。注意: あなたのコミットハッシュは異なるものになります。

次に、git show の後に取り消しコミットのコミットハッシュを指定します。YOUR_REVERT_COMMIT_HASHgit log --oneline の出力から得た実際のハッシュに置き換えてください。

git show YOUR_REVERT_COMMIT_HASH

たとえば、例のハッシュ k2l3m4n を使用すると:

git show k2l3m4n

以下のような出力が表示されるはずです。

commit k2l3m4n (HEAD -> master)
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:05:00 2023 +0000

    Revert "Add file2 (will be reverted)"

    This reverts commit 8h9i0j1.

diff --git a/file2.txt b/file2.txt
deleted file mode 100644
index 8b1a99c..0000000
--- a/file2.txt
+++ /dev/null
@@ -1 +0,0 @@
-This commit will be reverted

この出力を分解してみましょう。

  • 最初の部分はコミットの詳細を示しています。コミットハッシュ、作者、日付、およびコミットメッセージです。メッセージには、特定のコミット(ハッシュで識別)を取り消すことが明示されていることに注意してください。
  • diff セクションは、このコミットによって導入された変更を示しています。この場合、file2.txt が削除されたことを示しています(deleted file mode 100644)。これにより、取り消しコミットが file2.txt の作成を正常に取り消したことが確認されます。

git show を使用すると、履歴内の任意のコミットによって導入された正確な変更を調べることができます。これは、プロジェクトの履歴を理解し、取り消しやその他の変更が正しく適用されたことを検証するために非常に便利です。

取り消されていないコミットをテストする

前のステップでは、いくつかのコミットを作成し、そのうちの 1 つを取り消しました。git log を使って履歴を確認し、git show を使って取り消しコミットを調べました。では、取り消されていないコミットがまだ存在し、期待される変更を含んでいることを検証しましょう。

まず、~/project/my-time-machine ディレクトリにいることを確認します。

cd ~/project/my-time-machine

git log --oneline からのコミット履歴を思い出してみましょう。

k2l3m4n (HEAD -> master) Revert "Add file2 (will be reverted)"
8h9i0j1 Add file2 (will be reverted)
4e5f6g7 Add more content to file1
a1b2c3d Add file1

「Add file1」と「Add more content to file1」のコミットは取り消されていません。git show を使って「Add more content to file1」コミットを調べ、その変更を確認しましょう。

git log --oneline の出力から「Add more content to file1」のコミットハッシュを見つけます。上の例では、それは 4e5f6g7 です。実際のコミットハッシュを使用することを忘れないでください。

次に、そのコミットハッシュを使って git show を実行します。

git show YOUR_MORE_CONTENT_COMMIT_HASH

たとえば、例のハッシュ 4e5f6g7 を使うと:

git show 4e5f6g7

以下のような出力が表示されるはずです。

commit 4e5f6g7
Author: Jane Doe <[email protected]>
Date:   Mon Aug 7 10:02:00 2023 +0000

    Add more content to file1

diff --git a/file1.txt b/file1.txt
index 8b1a99c..a1b2c3d 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1,2 @@
 Initial content
+Adding more content

この出力はコミットの詳細を示しており、diff セクションは「Adding more content」という行が file1.txt に追加されたことを明確に示しています。これにより、このコミットとその変更が、後のコミットが取り消されたとしても、依然としてプロジェクト履歴の一部であることが確認されます。

これは、Git の重要な側面を示しています。コミットを取り消すと、変更を元に戻す 新しい コミットが作成されます。元のコミットは履歴から削除されません。これは、すべての変更の完全な記録を保持し、プロジェクトの完全な進化を理解できるようにするために重要です。

同様に、「Add file1」コミットのハッシュ(例では a1b2c3d)を使って git show を実行すると、file1.txt の最初の作成を確認できます。

git log を使って履歴を確認し、git show を使って個々のコミットを調べることで、コミットが取り消された場合でも、プロジェクトのタイムラインを効果的にナビゲートし、理解することができます。

まとめ

この実験では、Git リポジトリ内の取り消されたコミットを特定する方法を学びました。まず、いくつかのコミットを含むプロジェクト履歴を作成し、その中には特に取り消し対象とするコミットも含まれていました。次に、git revert HEAD --no-edit コマンドを使用して、前のコミットの変更を元に戻す新しいコミットを作成しました。このプロセスは、コミットを取り消すと、元のコミットを削除するのではなく、履歴に新しいコミットが追加されることを示しています。

また、git log を使用してこれらの取り消しコミットを見つけ、git show を使用してその内容を検証し、取り消されていないコミットと区別する方法についても引き続き調べました。