Git のスタッシュが適用されたかどうかを確認する方法

GitGitBeginner
今すぐ練習

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

はじめに

この実験では、Git のスタッシュが作業ディレクトリに正常に適用されたかどうかを確認する方法を学びます。git stash コマンドとリポジトリの状態との相互作用を調べ、適用された変更を検証し、適用されていないスタッシュと区別する方法を示します。

実践的な手順を通じて、git status を使用して、変更をスタッシュして適用する前後の作業ディレクトリの状態を観察します。また、git stash list を利用してスタッシュエントリを管理および調査し、スタッシュした作業の適用状態を自信を持って判断できるようにします。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL git(("Git")) -.-> git/BasicOperationsGroup(["Basic Operations"]) git(("Git")) -.-> git/DataManagementGroup(["Data Management"]) git/BasicOperationsGroup -.-> git/status("Check Status") git/DataManagementGroup -.-> git/stash("Save Changes Temporarily") git/DataManagementGroup -.-> git/restore("Revert Files") subgraph Lab Skills git/status -.-> lab-560105{{"Git のスタッシュが適用されたかどうかを確認する方法"}} git/stash -.-> lab-560105{{"Git のスタッシュが適用されたかどうかを確認する方法"}} git/restore -.-> lab-560105{{"Git のスタッシュが適用されたかどうかを確認する方法"}} end

適用された変更の Git ステータスを確認する

このステップでは、Git の stash コマンドが作業ディレクトリとどのように相互作用するか、およびスタッシュを適用した後のリポジトリの状態を確認する方法を調べます。

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

cd ~/project/my-time-machine

次に、新しいファイルを作成し、コミットされていない変更をシミュレートするためにいくつかの内容を追加しましょう。

echo "This is a new feature." > feature.txt
echo "Adding some more content." >> message.txt

これで、新しいファイル feature.txt を作成し、既存の message.txt を変更しました。git status を使用して、Git がこれらの変更をどのように認識しているかを見てみましょう。

git status

feature.txt が追跡されていないこと、および message.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

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        feature.txt

no changes added to commit (use "git add" and/or "git commit -a")

次に、これらの変更をスタッシュしましょう。スタッシュは、不完全な変更をコミットせずに、現在の作業を一時的に退避させて別の作業に切り替えることができるようにする機能です。

git stash save "Work in progress"

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

Saved working tree and index state On master: Work in progress

これで作業ディレクトリはクリーンになり、変更を加えていないかのように見えるはずです。これを git status で確認できます。

git status

出力はクリーンな作業ディレクトリを示すはずです。

On branch master
nothing to commit, working tree clean

次に、先ほど作成したスタッシュを適用しましょう。スタッシュを適用すると、スタッシュされた変更が作業ディレクトリに戻ります。

git stash apply

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

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

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        feature.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9)

最後に、git status を再度確認して、スタッシュを適用した後の作業ディレクトリの状態を見てみましょう。

git status

出力は、スタッシュからの変更が作業ディレクトリに戻り、変更されたファイルと追跡されていないファイルとして表示されることを示すはずです。これは、git stash apply が変更を自動的にステージまたはコミットせずに戻すことを確認します。

git stash list を実行して確認する

このステップでは、git stash list コマンドを使用して保存したスタッシュのリストを表示する方法を学びます。このコマンドは、一時的な作業を追跡するのに便利です。

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

前のステップで、スタッシュを作成しました。スタッシュのリストにそれが表示されるのを見てみましょう。次のコマンドを入力します。

git stash list

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

stash@{0}: On master: Work in progress

この出力は、1 つのスタッシュが保存されていることを示しています。stash@{0} はこの特定のスタッシュの識別子です。波括弧内の数字は、スタッシュリスト内の位置を示しています(0 が最も新しい)。"On master" は、スタッシュを作成したときにいたブランチを示し、"Work in progress" はスタッシュを保存したときに指定したメッセージです。

複数のスタッシュがある場合、ここにリストされ、stash@{0} が最も新しく、stash@{1} が次に新しい、というように表示されます。

git stash list コマンドは、スタッシュを管理するために不可欠です。利用可能なスタッシュを確認でき、適用または削除したいスタッシュを特定するのに役立ちます。

スタッシュのリストを表示する方法を理解することは、進行中の作業を管理するためにスタッシュ機能を効果的に使用する最初のステップです。

未適用のスタッシュをテストする

このステップでは、スタッシュを適用してもスタッシュリストから削除されないことを確認します。これは、git stash applygit stash pop の重要な違いです。

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

前のステップで、スタッシュを作成し、それを適用しました。再度スタッシュリストを確認して、スタッシュがまだ残っているかどうかを見てみましょう。

git stash list

前と同じ出力が表示されるはずです。

stash@{0}: On master: Work in progress

ご覧の通り、スタッシュを適用した後も、それはスタッシュリストに残っています。これは、必要に応じて同じスタッシュを複数回適用できることを意味しますが、これは一般的なワークフローではありません。

スタッシュを適用すると同時にリストから削除したい場合は、git stash apply の代わりに git stash pop コマンドを使用します。pop は、変更を適用した後、すぐにスタッシュを削除するのと同じです。

git stash pop を実演してみましょう。まず、作業ディレクトリがクリーンであることを確認してください。スタッシュを適用したため、コミットされていない変更があります。この実演のために、これらをコミットするか、破棄することができます。クリーンな状態に戻すために、これらを破棄しましょう。

git restore .

このコマンドは、作業ディレクトリ内のすべての変更を破棄します。次に、ステータスを確認します。

git status

出力はクリーンな作業ディレクトリを示すはずです。

On branch master
nothing to commit, working tree clean

次に、git stash pop を使用してスタッシュを適用し、リストから削除しましょう。

git stash pop

スタッシュが適用され、その後削除されたことを示す出力が表示されるはずです。

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

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        feature.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9)

最後に、再度スタッシュリストを確認しましょう。

git stash list

今回は、何も出力されないはずです。これは、スタッシュリストが空であることを示しています。

これにより、git stash pop はスタッシュを適用した後に削除するのに対し、git stash apply はリストに残すことが確認されます。applypop の違いを理解することは、スタッシュを効果的に管理するために重要です。

まとめ

この実験では、Git のスタッシュが作業ディレクトリに正常に適用されたかどうかを確認する方法を学びました。まず、プロジェクト内で変更を作成してスタッシュし、次に git status を使用して、スタッシュおよび適用の前後の作業ディレクトリの状態を観察しました。スタッシュを適用した後に作業ディレクトリがクリーンであることは、変更が正常に復元されたことを示します。

また、git stash list を使用して利用可能なスタッシュのリストを表示し、git stash apply または git stash pop を使用してスタッシュを適用した後にそれがリストから削除されることを確認しました。これにより、特定のスタッシュが適用待ちでなくなったことを明確に確認することができます。