Git Stashの説明:Gitのローカル変更を一時的に保存する方法

Gitには、リポジトリにコミットせずに変更のスナップショットを一時的に保存できるstashと呼ばれる領域があります。これは、作業ディレクトリ、ステージング領域、またはリポジトリとは別のものです。

この機能は、コミットする準備ができていないブランチに変更を加えたが、別のブランチに切り替える必要がある場合に役立ちます。

スタッシュの変更

変更をスタッシュに保存するには、次のコマンドを実行します。

git stash save "optional message for yourself"

これにより、変更が保存され、作業ディレクトリが最新のコミットの外観に戻ります。隠された変更は、そのリポジトリ内の任意のブランチから利用できます。

隠したい変更は、追跡されたファイルにある必要があることに注意してください。新しいファイルを作成して変更を隠そうとすると、エラーが発生する場合がありますNo local changes to save

隠された変更を表示する

隠し場所に何があるかを確認するには、次のコマンドを実行します。

git stash list

これにより、保存されたスナップショットのリストがの形式で返されます[email protected]{0}: BRANCH-STASHED-CHANGES-ARE-FOR: MESSAGE[email protected]{0}部分はスタッシュの名前であり、中括弧内の数字は({ })はスタッシュの指標です。複数の変更セットが隠されている場合、それぞれに異なるインデックスが付けられます。

スタッシュに加えられた変更を忘れた場合は、でそれらの概要を確認できますgit stash show NAME-OF-STASH。典型的なdiffスタイルのパッチレイアウト(行ごとの変更には+と-を使用)を確認したい場合は、-p(パッチ用)オプションを含めることができます。次に例を示します。

git stash show -p [email protected]{0} # Example result: diff --git a/PathToFile/fileA b/PathToFile/fileA index 2417dd9..b2c9092 100644 --- a/PathToFile/fileA +++ b/PathToFile/fileA @@ -1,4 +1,4 @@ -What this line looks like on branch +What this line looks like with stashed changes

隠された変更を取得する

スタッシュから変更を取得して、現在のブランチに適用するには、次の2つのオプションがあります。

  1. git stash apply STASH-NAME 変更を適用し、コピーを隠し場所に残します
  2. git stash pop STASH-NAME 変更を適用し、ファイルをスタッシュから削除します

変更を適用すると、競合が発生する可能性があります。マージと同様に競合を解決できます(詳細git mergeについてはを参照してください)。

隠された変更を削除する

隠された変更を適用せずに削除する場合は、次のコマンドを実行します。

git stash drop STASH-NAME

スタッシュ全体をクリアするには、次のコマンドを実行します。

git stash clear