gitでstashコンテンツをプレビューすることは可能ですか?


554

私はしばしば後から作業を片付け、その後他のものが出てきます。数週間後、スタッシュを検査して、現在の状態の作業ツリーに適用した場合にどのような変更が行われるかを調べたいと思います。

stashでgit diffを実行できることはわかっていますが、これは作業ツリーとstashのすべての違いを示していますが、stashの適用内容が変更されることを知りたいだけです。

これどうやってするの?


1
カラー化された差分出力:(テキストエディターで出力の構文強調表示がサポートされている限り、テキストエディターであるgit stash show -p stash@{1} >~/.diff && vim ~/.diff必要はありません)。vimdiff
Trevor Boyd Smith

回答:


729

git stash show最新のスタッシュで変更されたファイルが表示されます。-p差分を表示するオプションを追加できます。

git stash show -p

関心のあるスタッシュが最新のものではない場合は、スタッシュの名前をコマンドの最後に追加します。

git stash show -p stash@{2}

それは良さそうです、そして私はそれをマニュアルで見ます、しかし私がそれを試みるとき私にそれを与えますfatal: unable to create temp-file: Invalid argument-何か考えがありますか?
Benjol 2010

29
git stash show -p stash@{0}特定の隠し場所を表示するために使用します。0は最後のトーンを示し、1は最後のトーンを示します。等々git stash listはすべての利用可能なトーンを示します。
brita_ 14

6
PowerShellを使用している場合は、スタッシュ名を引用符で囲む必要があります。(例:git stash show -p 'stash@{0}'
scott-pascoe 2014


1
ファイル使用時に差分を保存する場合git stash show -p stash@{0}> stash.txt
S_K

87

stashの現在のリストを表示するには:

git stash list

次のようなリストが表示されます。

stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...

これらの隠し場所のdiffを表示するには:

git stash show -p stash@{n}

34

私はのgitkgitリポジトリを視覚化するグラフィカルUIのファンです。あなたは次のもので隠された最後のアイテムを見ることができます:

gitk stash

隠された変更を表示することもできます(で一覧表示git stash list)。例えば:

gitk stash@{2}

以下のスクリーンショットでは、スタッシュが左上にコミットとして、いつ、どこからコミット履歴に来たか、右下に変更されたファイルのリスト、および下部に行ごとの差分が表示されます。 -左。隠し場所がまだ隠されている間はずっと。

隠し場所を表示するgitk


5
stash@{X}コマンドラインで複数の値を指定して、より多くの結果を一度に表示できますが、gitkで「すべてのstashエントリを表示」と言うだけの簡単な方法は見つかりませんでした。
nobar

5
gitk stash短縮形のようですgitk stash@{0}
Leif Gruenwoldt

3
使用できるgitkのすべてのスタッシュを表示しgitk `git stash list --pretty=format:%gd`、「WIPオン」を検索して次のスタッシュにジャンプします。
IkarPohorský16年

2
gitk --reflogすべての隠し場所などを表示できます。
nobar

1
gitkは、stashに追跡されていないファイルが保存されていることを直接示した唯一のツールでした。他のすべての人は私に「違いはない」とだけ示しました。
Martin Bonnerがモニカ

22

ポップされていないスタッシュのすべての変更を表示するには:

git stash show -p stash@{0}

ポップされていないスタッシュで特定のファイルの変更を表示するには:

git diff HEAD stash@{0} -- path/to/filename.php

ファイル名を覚えていない場合は、変更されたすべてのファイルでも機能しますgit diff HEAD stash @ {0}
Simeon

わかりやすくするために、はの-p略です--patch。オプションはから来ますgit-diff。あなたが長い形式を好むなら、あなたは書くことができますgit stash show --patch
Peterino、

5

のgitkの推奨事項を超えていますgitでスタッシュの内容をプレビューすることは可能ですか?あなたはtigをインストールして呼び出すことができますtig stash。このフリー/オープンコンソールプログラムでは、比較するスタッシュを選択することもできます


1
複数の隠し場所を管理するのに最適なツールのようです!とキーでスタッシュをポップおよびドロップすることもできます。P!
IkarPohorský16年

TUIの代替案は常に優れていますが、すでに慣れている人や何らかの形で好む人gitk にとって、すべての隠し場所を表示するためにハッキングするのは比較的簡単です
1737973


4

この質問が最初に尋ねられたとき、これは選択肢ではなかったかもしれませんが、PyCharmを使用している場合は、UnStash Changesツール(VCS-> Git-> UnStash Changes ...)を使用できます。これにより、隠された変更のリストを表示したり、ポップ、ドロップ、クリア、または(必要に応じて新しいブランチに)適用したりできます。

Unstash Changesウィンドウ

stashごとに変更されたファイルを表示します。

影響を受けるパス

ファイルごとの差分も同様です。差分で、隠された変更から作業ブランチに適用する個別の変更をチェリーピックできます(左向きのシェブロンを使用)。

ここに画像の説明を入力してください


3

次のコマンドですべてのスタッシュのリストを表示できます。

$ git stash list

stash@{0}: WIP on dev: ddd4d75 spelling fix

stash@{1}: WIP on dev: 40e65a8 setting width for messages

......

......

......


stash@{12}: WIP on dev: 264fdab added token based auth

最新の隠し場所は最初のものです。

n上記のリストにあるスタッシュのインデックスを選択し、次のコマンドを使用して、スタッシュされた詳細を表示できます

git stash show -p stash@{3}

同様に、

git stash show -p stash@{n}

次のコマンドを使用して、diffを確認することもできます。

git diff HEAD stash@{n} -- /path/to/file

3

はい、変更内容を確認する最良の方法は、次のようにファイルに保存することです。

git stash show -p stash@{0} > stash.txt

2

最初に、すべてのstashアイテムを取得するためにgit stashリストを利用できます。

$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...

次に、を使用しgit stash show stash@{N}て、特定のstashの下にあるファイルをチェックできますN。発砲すると、次のようになります。

$ git stash show stash@{2}
fatal: ambiguous argument 'stash@2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

これは、シェルが中括弧とgit sees stash@2を食べているのではなく、食べていることが原因である可能性がありstash@{2}ます。これを修正するには、中かっこの単一引用符を次のように使用する必要があります。

git stash show stash@'{2'}
com/java/myproject/my-xml-impl.xml                     | 16 ++++++++--------
com/java/myproject/MyJavaClass.java                    | 16 ++++++++--------
etc.

2

隠された変更のリストを表示

git stash list

特定のスタッシュで変更されたファイルのリストを表示するには

git stash show -p stash@{0} --name-only

stashで特定のファイルを表示するため

git show stash@{0} path/to/file

1

すべての隠し場所を表示する

ファイル名のみ:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show $i; done

すべてのスタッシュの完全なファイル内容:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show -p $i; done

あなたが持つページができることを色づけdiffの出力を取得しますspace前方)及びb後方)、およびq現在のスタッシュのためのページャを閉じます。ファイルに入れたい場合は> stashes.diff、コマンドに追加します。


1

使用を提案する既存の回答に加えて(最後から3番目のスタッシュの差分を表示するため)

git stash show -p stash@{2}

git-stashドキュメントでは、次のように書かれていることに注意してください

スタッシュは、スタッシュインデックスのみを指定することによっても参照できます(たとえば、整数nはと同等ですstash@{n})。

したがって、使用することも可能です(これは上記のコマンドと同等です)。

git stash show -p 2

これにより、Powershellの問題も回避できます


1

gitk追跡されていないものやインデックスに座っているものを正確に示す方法が好きですが、デフォルトでは、現在のブランチの他のすべてのコミットの真ん中にそれらのスタッシュ「コミット」が表示されます。

トリックは次のようにgitkを実行することです:

gitk "stash@{0}^!"

(引用は、Powershellで機能させるためにありますが、この方法でも他のシェルでも機能するはずです。)

gitrevisionsのヘルプページでこの構文を調べると、次のことがわかります。

r1^!表記はコミット含み、R1が、そのすべての親の除外を。単独では、この表記は単一のコミットr1を示します。

これはどうやらgitkを、選択したコミットの直接の親だけが表示されるようなモードにします。これはまさに私の好みです。


これをさらに進めてすべてのスタッシュをリストしたい場合は、これを実行できます:

gitk `git stash list '--pretty=format:%gd^!'`

(バッククォート内のこれらの一重引用符はBashをなだめるために必要です。それ以外の場合は感嘆符について不平を言います)

WindowsでcmdまたはPowershellを使用している場合:

gitk "--argscmd=git stash list --pretty=format:%gd^!"

0

次のコマンドを使用して、隠された変更の差分を他の隠し場所、コミット、またはブランチまたはHEADから再度抽出できます。

git stash show
git show
git diff
git difftool

上記の各コマンドをどのように使用できるか見てみましょう。

  1. git stashショー

単純なコマンドgit stash showは、ファイルの変更の非常に短い要約を提供しますが、現在のHEADに対する変更の差分を表示しません。

  1. git show

コマンドgit-showは、さまざまなタイプのオブジェクトを表示するために使用されます。

コマンドgit-showは、スタッシュの変更を視覚化するためだけでなく、ブロブ、ツリー、タグ、コミットなどの1つ以上のオブジェクトを表示するためにも使用されます。

  1. git diff

コマンドgit-diffも、コミット、コミットと作業ツリーなどの間の変更を表示するために使用される一般的なコマンドの1つです。

デフォルトでは、他のstash参照またはコミットが指定されていない限り、git diffは選択されたstashの差分を(変更されたファイル)リポジトリの現在の状態に対して表示します。

最上位のstash stash @ {0}とマスターブランチの違いを取得するには:

$ git diff stash @ {0}マスター

変更の差分ではなく、ファイルの名前のみを表示します。

$ git diff --name-only stash @ {0} master

選択したファイルの選択したスタッシュ間の相違を表示します。

$ git diff stash @ {0} ^ 1 stash @ {0}-

  1. git difftool

コマンドgit-difftoolを使用して、選択したstashと選択したコミットまたはブランチまたはstashの間の差分を見つけることもできます

最新の2つのスタッシュの違いを確認します。

$ git difftool stash @ {0} stash @ {0} ^ 1

git difftool --dir-diff stash @ {0} stash @ {0} ^ 1

概要:

選択したstash git stash show、git show、git diff、git difftoolから差分を抽出するのに役立つコマンド。

コマンドgit stash showを使用して違いを確認します。

git stash show -p stash @ {0}

コマンドgit showを使用してstashの変更を確認します。

git show stash @ {1}

コマンドgit diffを使用して、最新のスタッシュと選択したコミットの違いを確認します。

git diff stash @ {0}

参照:

https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/

https://git-scm.com/docs/git-show

https://git-scm.com/docs/git-stash

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.