サーチ…


構文

  • 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のコンテキストメニューを使用して、関心のある到達不能なコミットの分岐を作成することができます。その後、すべての通常のツールを使用して、必要な操作を実行できます。あなたが終わったら、それらの枝をもう一度吹き飛ばしてください。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow