はじめに
この実験では、Git でファイルが名前を変更された後でも、そのファイルの履歴を効果的に追跡する方法を学びます。名前の変更をまたいでファイルの履歴を追跡するために、強力な git log --follow
コマンドを調べます。
また、git diff --name-status
を使ってコミット間のファイルの状態を調べる方法も学びます。最後に、名前を変更されていないファイルにこれらの手法を適用し、出力の違いを理解します。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Git でファイルが名前を変更された後でも、そのファイルの履歴を効果的に追跡する方法を学びます。名前の変更をまたいでファイルの履歴を追跡するために、強力な git log --follow
コマンドを調べます。
また、git diff --name-status
を使ってコミット間のファイルの状態を調べる方法も学びます。最後に、名前を変更されていないファイルにこれらの手法を適用し、出力の違いを理解します。
git log --follow
を実行する - ファイルこのステップでは、特定のファイルが名前を変更された場合でも、その履歴を追跡する方法を調べます。このときに便利なのが git log --follow
コマンドです。
まず、プロジェクトディレクトリにいることを確認しましょう。
cd ~/project/my-time-machine
次に、新しいファイルを作成し、内容を追加しましょう。
echo "This is the original content." > original_file.txt
このファイルを追加してコミットします。
git add original_file.txt
git commit -m "Add original file"
以下のような出力が表示されるはずです。
[master 1a2b3c4] Add original file
1 file changed, 1 insertion(+)
create mode 100644 original_file.txt
次に、ファイルの名前を変更しましょう。
git mv original_file.txt renamed_file.txt
変更を確認するためにステータスをチェックします。
git status
以下のような表示がされるはずです。
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: original_file.txt -> renamed_file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt
名前の変更をコミットします。
git commit -m "Rename original file"
以下のような出力が表示されるはずです。
[master 5d6e7f8] Rename original file
1 file changed, 0 insertions(+), 0 deletions(-)
rename original_file.txt -> renamed_file.txt (100%)
次に、git log
を使って名前を変更したファイルの履歴を表示しましょう。
git log renamed_file.txt
これでは、ファイルの名前が変更されたコミットのみが表示されます。名前変更前の履歴を表示するには、--follow
オプションを使用する必要があります。
git log --follow renamed_file.txt
このコマンドを使うと、ファイルの名前の変更を追跡して、その履歴を表示します。「Rename original file」のコミットと「Add original file」のコミットの両方が表示されるはずです。
git log --follow
コマンドは、リポジトリ内で移動または名前変更されたファイルの完全な履歴を理解する必要があるときに不可欠です。現在の名前に関係なく、異なるコミット間でファイルの進化を追跡するのに役立ちます。
git diff --name-status
を使用するこのステップでは、git diff --name-status
を使ってコミット間の変更の概要を確認する方法を学びます。特に、変更されたファイルの状態と名前に焦点を当てます。
まず、正しいディレクトリにいることを確認しましょう。
cd ~/project/my-time-machine
renamed_file.txt
にさらに変更を加えましょう。
echo "Adding a new line." >> renamed_file.txt
次に、ステータスを確認します。
git status
renamed_file.txt
が変更されていることが表示されるはずです。
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: renamed_file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt
no changes added to commit (use "git add" and/or "git commit -a")
この変更をステージングエリアに追加します。
git add renamed_file.txt
次に、git diff --name-status
を使って、最後のコミットとステージングされた変更の間の差分を確認しましょう。
git diff --name-status --cached
--cached
オプションは、git diff
にステージングされた変更(インデックス)と最後のコミット(HEAD)を比較するよう指示します。
以下のような出力が表示されるはずです。
M renamed_file.txt
出力 M renamed_file.txt
は、renamed_file.txt
が**変更(Modified)**されたことを示しています。
次に、この変更をコミットしましょう。
git commit -m "Add new line to renamed file"
以下のような出力が表示されるはずです。
[master 9h0i1j2] Add new line to renamed file
1 file changed, 1 insertion(+)
git diff --name-status
コマンドは、Git の履歴における異なるポイント間で、どのような種類の変更(追加、変更、削除、名前変更、コピー)が行われたかを、変更内容の詳細を表示せずに迅速に把握するのに非常に便利です。これは、コミット前に変更をレビューするときや、ブランチを比較するときに特に役立ちます。
このステップでは、git log --follow
が名前を変更していないファイルに対してどのように動作するかを見ていきます。これにより、--follow
オプションが必要な状況をより深く理解することができます。
まず、正しいディレクトリにいることを確認しましょう。
cd ~/project/my-time-machine
リポジトリには既に renamed_file.txt
と message.txt
があります。message.txt
に内容を追加しましょう。
echo "This is a message." >> message.txt
ステータスを確認します。
git status
message.txt
が変更され、renamed_file.txt
は最新の状態であることが表示されるはずです。
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: message.txt
no changes added to commit (use "git add" and/or "git commit -a")
message.txt
の変更を追加してコミットします。
git add message.txt
git commit -m "Add content to message file"
以下のような出力が表示されるはずです。
[master 3k4l5m6] Add content to message file
1 file changed, 1 insertion(+)
次に、message.txt
に対して git log
を実行しましょう。
git log message.txt
これにより、message.txt
の履歴が表示されます。「Add content to message file」のコミットと、message.txt
が作成された最初のコミット(最初の実験でのもの)が表示されるはずです。
次に、message.txt
に対して git log --follow
を試してみましょう。
git log --follow message.txt
出力が git log message.txt
と同じであることに気づくでしょう。これは、message.txt
が名前を変更されたり移動されたりしていないからです。--follow
オプションは、名前の変更を伴うファイルの履歴を追跡するために特別に設計されています。名前を変更していないファイルには、git log
で十分です。
このステップでは、git log --follow
が名前を変更したファイルの追跡に強力である一方で、名前を維持しているファイルには標準の git log
コマンドで完全な履歴を取得できることを示しています。この違いを理解することで、タスクに適したコマンドを選ぶことができます。
この実験では、Git でファイルの名前を変更した後でもその履歴を追跡する方法を学びました。まず、ファイルを作成し、追加してコミットし、次に git mv
を使用してファイル名を変更し、その変更をコミットしました。その後、新しいファイル名に対して単純な git log
を実行すると、名前変更以降の履歴のみが表示されることを示しました。
重要なポイントは、git log --follow <filename>
コマンドの使用です。この強力なオプションを使用すると、Git はファイルの名前変更をまたいでその履歴を追跡でき、作成から現在の状態までの完全な進化の様子を把握することができます。これは、プロジェクトの履歴の中でファイルの変更の完全な文脈を理解するために重要です。