web-dev-qa-db-ja.com

gitでstashの内容をプレビューすることはできますか?

後で作業を片付けることがよくあり、その後、他のものがやって来ます。数週間後、隠し場所を調べて、現在の状態で作業ツリーに適用した場合にどのような変更が行われるかを調べたいと思います。

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

これどうやってするの?

467
Benjol

git stash showは、最新のstashで変更されたファイルを表示します。 -pオプションを追加して、差分を表示できます。

git stash show -p

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

git stash show -p stash@{2}
622
Jlew

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

git stash list

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

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

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

git stash show -p stash@{n}
81
segfault

私はgitリポジトリを視覚化するgitkのグラフィカルUIのファンです。最後に隠されたアイテムを表示できます:

gitk stash

git stash listでリストされているように)隠された変更を表示することもできます。例えば:

gitk stash@{2}

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

gitk viewing a stash

32
Jeff Ward

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

git stash show -p stash@{0}

ポップされていない隠し場所にある特定のファイルの変更を表示するには:

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

git stash applyを使用してstashを適用するだけですか?これはスタッシュを削除しないため、変更が気に入らなければ、スタッシュされた作業を失うことなく作業ツリーをリセットできます。そして、それらが気に入ったら、git stash dropを使用して単純に隠しておくことができます。

12
lunaryorn

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

5
Bruce

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

$ 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

これを使用して、色の違いを強調表示してすべてのスタッシュを表示します(Fedora 21):

git stash list | 
  awk -F: '{ print "\n\n\n\n"; print $0; print "\n\n"; 
  system("git -c color.ui=always stash show -p " $1); }' | 
  less -R

Git:隠し場所を適用せずに隠し場所にあるものを確認

3
seanf

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

Unstash Changes Window

スタッシュごとに変更されたファイルを表示します。

Paths Affected Window

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

enter image description here

2
hlongmore

まず、git stashリストを使用して、すべてのstashアイテムを取得します。

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

次に、git stash show stash@{N}を使用して、特定のスタッシュ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が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
i_am_zero

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

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

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

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

gitk "stash@{0}^!"

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

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

r1^!表記にはcommitr1が含まれますが、その親はすべて除外されます。それ自体では、この表記は単一コミットr1を示します。

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


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

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

(Bashをなだめるには、バッククォート内の単一引用符が必要です。そうでない場合、感嘆符について文句を言います)

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

gitk "--argscmd=git stash list --pretty=format:%Gd^!"
1
JBert

すべてのスタッシュを表示

ファイル名のみ:

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

ページ化できる色付きの差分出力が得られます space (forward)および b (backwards)、および q 現在の隠し場所のページャーを閉じます。ファイルに入れたい場合は、コマンドに> stashes.diffを追加してください。

1
ccpizza

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

git stash list

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

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

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

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

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

git stash show -p stash@{2}

git-stash documentation には、

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

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

git stash show -p 2

Powershellの問題 も回避する必要があります。

0
user202729

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

git stash show
git show
git diff
git difftool

上記の各コマンドの使用方法を見てみましょう。

  1. git stash show

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

  1. git show

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

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

  1. git diff

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

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

一番上のstash stash @ {0}とmasterブランチの違いを取得するには:

$ 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

要約:

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

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

git stash show -p stash @ {0}

コマンドgit showを使用してスタッシュの変更を確認します。

git show stash @ {1}

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

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

0
hxysayhi