サーチ…
構文
-
git stash list [<options>]
-
git stash show [<stash>]
-
git stash drop [-q|--quiet] [<stash>]
-
git stash ( pop | apply ) [--index] [-q|--quiet] [<stash>]
-
git stash branch <branchname> [<stash>]
-
git stash [save [-p|--patch] [-k|--[no-]keep-index] [-q|--quiet] [-u|--include-untracked] [-a|--all] [<message>]]
-
git stash clear
-
git stash create [<message>]
-
git stash store [-m|--message <message>] [-q|--quiet] <commit>
パラメーター
パラメータ | 詳細 |
---|---|
ショー | 隠しに記録された変更を隠し状態と元の親との差分として表示します。 <stash>が指定されていない場合は、最新のものを表示します。 |
リスト | あなたが現在持っているスタッシュを一覧表示します。各隠しはその名前とともにリストされています(例えば、stash @ {0}は最新の隠し、stash @ {1}は前のものです)、stashが作成されたときのブランチの名前、 stashはコミットの説明に基づいていました。 |
ポップ | スティッシュリストから1つの隠しステートを削除し、それを現在の作業ツリーステートの上に適用します。 |
適用する | pop と同じですが、stashリストから状態を削除しないでください。 |
クリア | すべての隠された状態を削除します。これらの州は枝刈りの対象となり、回復することは不可能かもしれないことに注意してください。 |
ドロップ | スティッシュリストから単一の隠し状態を削除します。 <stash>が指定されていない場合は、最新のものを削除します。つまり、@ {0}を隠してください。さもなければ、<stash>はstash @ {<revision>}という形式の有効なstashログ参照でなければなりません。 |
作成する | stash(通常のコミットオブジェクト)を作成し、ref名前空間のどこにも格納せずにそのオブジェクト名を返します。これは、スクリプトにとって便利なものです。おそらくあなたが使用したいコマンドではありません。上記の「保存」を参照してください。 |
格納 | git stash create(ぶら下がりマージコミット)によって作成されたstashをstash refに格納し、stash reflogを更新します。これは、スクリプトにとって便利なものです。おそらくあなたが使用したいコマンドではありません。上記の「保存」を参照してください。 |
備考
Stashingは、情報を失うことなく、きれいな作業ディレクトリを持つことができます。その後、別の作業を開始したり、ブランチを切り替えることができます。
Stashingとは何ですか?
プロジェクトの作業中に、マスターに対してバグが発生した場合、機能ブランチの変更の途中にいる可能性があります。コードをコミットする準備ができていませんが、変更を失いたくはありません。これはgit stash
が便利な場所です。
ブランチでgit status
を実行してコミットされていない変更を表示する:
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
git stash
を実行して、これらの変更をスタックに保存します。
(master) $ git stash
Saved working directory and index state WIP on master:
2f2a6e1 Merge pull request #1 from test/test-branch
HEAD is now at 2f2a6e1 Merge pull request #1 from test/test-branch
作業ディレクトリにファイルを追加した場合、これらのファイルも隠すことができます。あなたはそれらを最初に踏み出す必要があります。
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
NewPhoto.c
nothing added to commit but untracked files present (use "git add" to track)
(master) $ git stage NewPhoto.c
(master) $ git stash
Saved working directory and index state WIP on master:
(master) $ git status
On branch master
nothing to commit, working tree clean
(master) $
あなたの作業ディレクトリは、あなたが行った変更をきれいにしました。 git status
再実行すると、次のように表示されgit status
。
(master) $ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
最後のstashを適用するには、 git stash apply
実行しgit stash apply
(さらに、 git stash pop
最後に変更されたgit stash pop
適用して削除できます)。
(master) $ git stash apply
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
ただし、stashingは作業中のブランチを覚えていないことに注意してください。上記の例では、ユーザーはマスターに隠れていました。 devブランチ、 dev 、およびgit stash apply
を実行git stash apply
、最後のstashがdevブランチに置かれます。
(master) $ git checkout -b dev
Switched to a new branch 'dev'
(dev) $ git stash apply
On branch dev
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: business/com/test/core/actions/Photo.c
no changes added to commit (use "git add" and/or "git commit -a")
隠しを作成する
作業ディレクトリの現在の状態とインデックス(ステージング領域とも呼ばれます)をスタッシュのスタックに保存します。
git stash
--include-untracked
ファイルをstashに含めるには、-- --include-untracked
または-u
フラグを使用します。
git stash --include-untracked
後でより簡単に識別できるように隠されたメッセージを含める
git stash save "<whatever message>"
stashを使用した後にステージング領域を現在の状態にするには、-- --keep-index
または-k
フラグを使用します。
git stash --keep-index
保存されたスタッシュを一覧表示する
git stash list
スタック内のすべてのスラッシュが、時系列の逆順に表示されます。
次のようなリストが表示されます。
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
特定のstashをその名前で参照することができます(例えば、 stash@{1}
。
隠しを表示
最後のstashに保存された変更を表示します。
git stash show
または特定の隠し場所
git stash show stash@{n}
特定のstashのために保存された変更の内容を表示するには
git stash show -p stash@{n}
隠しを削除する
すべての隠しを削除する
git stash clear
最後のstashを削除します。
git stash drop
または特定の隠し場所
git stash drop stash@{n}
隠しを適用して削除する
最後の隠しを適用してスタックから削除するには、次のように入力します。
git stash pop
特定のstashを適用してスタックから削除するには、次のように入力します。
git stash pop stash@{n}
スティッシュを削除せずに適用する
最後のスラッシュをスタックから削除せずに適用します。
git stash apply
または特定の隠し場所
git stash apply stash@{n}
隠しからの以前の変更のリカバリ
git stashを実行した後に最新のstashを取得するには、
git stash apply
あなたのひだのリストを見るには、
git stash list
次のようなリストが表示されます
stash@{0}: WIP on master: 67a4e01 Merge tests into develop
stash@{1}: WIP on master: 70f0d95 Add user role to localStorage on user login
必要な隠しアイテムに表示されている番号でリストアするには別のgit stashを選択してください
git stash apply stash@{2}
部分隠し
あなたのワーキングセットにいくつかの相違点だけを残しておきたい場合は、部分隠しを使うことができます。
git stash -p
そして、対話的に隠すハンクを選択します。
バージョン2.13.0では、対話モードを回避して、新しいpushキーワードを使用してpathspecで部分的な隠しを作成することもできます。
git stash push -m "My partial stash" -- app.config
チェックアウトで隠し場所の一部を適用する
隠し場所を作って、その隠し場所のいくつかのファイルだけをチェックアウトしたいと思っています。
git checkout stash@{0} -- myfile.txt
インタラクティブ・スタシング
Stashingは、作業ディレクトリの汚れた状態、つまり変更された追跡ファイルと段階的な変更を取り込んで、いつでも再適用できる未完了の変更のスタックに保存します。
変更されたファイルのみを隠す:
ステージングされたファイルを隠さずに、変更されたファイルのみを隠して、次のものを使用できるようにしたいとします。
git stash --keep-index
変更されたファイルだけが隠されます。
追跡されていないファイルを隠す:
Stashは、改ざんされていないファイルを保存することはありません。あなたが未追跡のファイルを隠しておく必要がある場合、あなたはこれを使うことができます:
git stash -u
これは、追跡されていない、ステージングされた、修正されたファイルを追跡します。
特定の変更のみを隠す:
ファイルからコードの一部だけを隠す必要があると仮定したり、変更され隠されたすべてのファイルからのいくつかのファイルだけを隠したりする必要があるとします。
git stash --patch
Gitは変更されたすべてを隠しませんが、代わりにあなたが隠したいと思っている変更とあなたの作業ディレクトリに保存したい変更のどちらを対話的にプロンプトします。
進行中の作業を別のブランチに移す
作業中に間違ったブランチになっていて、まだコミットを作成していない場合は、stashを使用してブランチを修正するために作業を簡単に移動できます。
git stash
git checkout correct-branch
git stash pop
git stash pop
は最後のstashを適用し、stashリストから削除します。隠れたものをリストに残し、一部のブランチにのみ適用するには次のものを使用できます:
git stash apply
ドロップされた隠しを回復する
あなただけがそれをポップし、端末がまだ開いている場合、あなたはまだ画面上のgit stash pop
によって出力されるハッシュ値を持っています:
$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)
(git stash dropも同じ行を生成することに注意してください)。
そうでなければ、あなたはこれを使って見つけることができます:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
コミット・グラフのヒントにあるすべてのコミットが分岐やタグから参照されなくなります。失われたコミット(作成したすべての隠しコミットを含む)はそのグラフのどこかにあります。
あなたが望むstash commitを見つける最も簡単な方法はおそらくそのリストをgitk
に渡すことです:
gitk --all $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' )
これはリポジトリブラウザを起動し、到達可能かどうかにかかわらず、リポジトリ内のコミットをすべて表示します。
別のGUIアプリケーションでコンソール上の素晴らしいグラフが好きな場合は、 git log --graph --oneline --decorate
ようにgitk
を置き換えることができます。
stashコミットを特定するには、この形式のコミット・メッセージを探します。
いくつかの ブランチで WIP: commithashいくつかの古いコミットメッセージ
あなたが望むコミットのハッシュを知ったら、隠しとしてそれを適用することができます:
git stash apply $stash_hash
または、 gitk
のコンテキストメニューを使用して、関心のある到達不能なコミットの分岐を作成することができます。その後、すべての通常のツールを使用して、必要な操作を実行できます。あなたが終わったら、それらの枝をもう一度吹き飛ばしてください。