Git スタッシュに特定の変更が含まれているかどうかを確認する方法

GitGitBeginner
今すぐ練習

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

はじめに

この実験では、Git のスタッシュ内容を調べて、特定の変更が含まれているかどうかを判断する方法を学びます。まず、サンプルリポジトリでいくつかの変更を加え、それをスタッシュします。

次に、git stash show -p コマンドを使用して、最新のスタッシュの詳細な差分を表示します。これにより、追加、削除、または変更された正確な行を確認できます。最後に、複数のスタッシュを調べて、探している変更を見つける方法を探ります。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git/BasicOperationsGroup -.-> git/diff("Compare Changes") git/DataManagementGroup -.-> git/stash("Save Changes Temporarily") subgraph Lab Skills git/diff -.-> lab-560103{{"Git スタッシュに特定の変更が含まれているかどうかを確認する方法"}} git/stash -.-> lab-560103{{"Git スタッシュに特定の変更が含まれているかどうかを確認する方法"}} end

git stash show -p を実行する

このステップでは、Git のスタッシュに保存された変更を調べる方法を学びます。git stash を使用すると、Git はコミットされていない変更を保存します。保存された内容を正確に確認するには、git stash show コマンドを使用できます。

まず、my-time-machine リポジトリ内のファイルにいくつかの変更を加えましょう。まだそのディレクトリにいない場合は、そこに移動します。

cd ~/project/my-time-machine

次に、message.txt ファイルに新しい内容を追加しましょう。既存の内容を上書きしないように、>> を使って echo コマンドでファイルに追記します。

echo "Adding a new line for stashing." >> message.txt

cat を使用してファイルの内容を確認できます。

cat message.txt

元の行と新しい行の両方が表示されるはずです。

Hello, Future Me
Adding a new line for stashing.

これで、これらの変更をスタッシュしましょう。スタッシュすると、コミットされていない変更が保存されるので、他の作業を行ってから後で戻ってくることができます。

git stash save "Added a line for stashing demo"

変更が保存されたことを示す出力が表示されるはずです。

Saved working tree and index state On branch master: Added a line for stashing demo

変更がスタッシュされたので、git stash show を使用してスタッシュの内容を確認しましょう。

git stash show

このコマンドは、最新のスタッシュ内の変更の概要を表示します。次のような出力が表示されるかもしれません。

 message.txt | 1 +
 1 file changed, 1 insertion(+)

これは、1 つのファイル (message.txt) が変更され、1 つの挿入 (新しい行) があったことを示しています。

変更の実際の内容を確認するには、-p フラグ (パッチを意味します) を追加する必要があります。これにより、git diff と同じように差分が表示されます。

git stash show -p

このコマンドは、スタッシュされた変更で追加、削除、または変更された正確な行を表示します。出力は標準的な Git の差分と似ています。

diff --git a/message.txt b/message.txt
index <some_hash>..<some_hash> 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+Adding a new line for stashing.

+ で始まる行は追加を示しています。この場合、「Adding a new line for stashing.」という行を追加しました。

git stash show -p を使用することは、スタッシュを適用するか破棄するかを決定する前に、スタッシュに何が含まれているかを理解するために重要です。これにより、スタッシュに期待する変更が含まれていることを確認できます。

スタッシュの差分を検索して変更を見つける

前のステップでは、git stash show -p を使用してスタッシュ内の変更を表示しました。時には、差分の出力が非常に長くなることがあります。特に大規模なプロジェクトではそうです。そのような場合、スタッシュの差分内で特定の変更を検索したいことがあります。

Git の差分出力は単なるテキストなので、grep などの標準的な Linux コマンドラインツールにパイプで渡してパターンを検索することができます。

前のステップで追加した行「Adding a new line for stashing.」を検索してみましょう。

まだ ~/project/my-time-machine ディレクトリにいることを確認してください。

cd ~/project/my-time-machine

次に、git stash show -p コマンドを実行し、その出力を grep にパイプで渡します。「stashing」という単語を検索します。

git stash show -p | grep "stashing"

差分出力から「stashing」という単語を含む行が表示されるはずです。

+Adding a new line for stashing.

これは、grep を使用して git stash show -p の出力をフィルタリングし、スタッシュされた変更内で特定の行やパターンを見つける方法を示しています。

grep の任意のオプションを使用して検索を絞り込むことができます。たとえば、大文字小文字を区別しない検索には -i を、一致する行の前後のコンテキスト行を表示するには -C を使用できます。

スタッシュの差分を検索できることは、特に複数のスタッシュがある場合や大きなスタッシュがある場合に強力な手法です。これにより、差分出力全体を手動でスクロールすることなく、関心のある変更をすばやく見つけることができます。

複数のスタッシュをテストする

実際のシナリオでは、複数回変更をスタッシュする必要があることがあります。Git では複数のスタッシュを持つことができ、これらはスタックとして管理されます。最新のスタッシュはスタックの先頭にあり、stash@{0} と呼ばれます。古いスタッシュは stash@{1}stash@{2} といったようになります。

別のセットの変更を作成してスタッシュし、これがどのように機能するかを見てみましょう。

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

cd ~/project/my-time-machine

次に、message.txt に別の行を追加しましょう。

echo "Adding a second line for another stash." >> message.txt

内容を確認します。

cat message.txt

これで 3 行が表示されるはずです。

Hello, Future Me
Adding a new line for stashing.
Adding a second line for another stash.

これで、これらの新しい変更をスタッシュしましょう。

git stash save "Added a second line for stashing demo"

新しいスタッシュが保存されたことを示す出力が表示されるはずです。

Saved working tree and index state On branch master: Added a second line for stashing demo

持っているスタッシュのリストを表示するには、git stash list コマンドを使用します。

git stash list

次のような表示がされるはずです。

stash@{0}: On master: Added a second line for stashing demo
stash@{1}: On master: Added a line for stashing demo

最新のスタッシュ ("Added a second line...") が stash@{0} で、前のスタッシュ ("Added a line...") が stash@{1} であることに注意してください。

git stash show -p にスタッシュ識別子を指定することで、特定のスタッシュの内容を表示できます。たとえば、最初に作成したスタッシュ (stash@{1}) を表示するには、次のようにします。

git stash show -p stash@{1}

これにより、stash@{1} の変更の差分が表示されます。

diff --git a/message.txt b/message.txt
index <some_hash>..<some_hash> 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+Adding a new line for stashing.

そして、最新のスタッシュ (stash@{0}) を表示するには、次のようにします。

git stash show -p stash@{0}

これにより、stash@{0} の変更の差分が表示されます。

diff --git a/message.txt b/message.txt
index <some_hash>..<some_hash> 100644
--- a/message.txt
+++ b/message.txt
@@ -2 +2,2 @@
 Adding a new line for stashing.
+Adding a second line for another stash.

複数のスタッシュを管理し、それぞれの内容を個別に調べることができることは、異なるタスクや実験を同時に行っているときに非常に便利です。

まとめ

この実験 (Lab) では、git stash show コマンドを使用して Git スタッシュの内容を調べる方法を学びました。まず、ファイルに変更を加え、git stash save を使って説明的なメッセージ付きでそれらの変更をスタッシュしました。次に、git stash show を使用して変更の概要を取得し、より重要なのは、git stash show -p を使用してスタッシュされた変更の詳細な差分を表示し、追加または変更された正確な行を確認できるようにしました。

提供された内容では完全に詳細が記載されていない後続のステップでは、おそらくスタッシュの差分から特定の変更を検索し、複数のスタッシュをテストして、スタック内の異なるスタッシュをどのように調べるかを理解することになります。このプロセスは、スタッシュを適用または破棄する前に、スタッシュに期待される変更が含まれていることを確認するために重要です。