後で作業を片付けることがよくあり、その後、他のものがやって来ます。数週間後、隠し場所を調べて、現在の状態で作業ツリーに適用した場合にどのような変更が行われるかを調べたいと思います。
Stashでgit diffを実行できることは知っていますが、これは作業ツリーとstashの違いをすべて示していますが、stashの適用内容が変わることを知りたいだけです。
これどうやってするの?
git stash show
は、最新のstashで変更されたファイルを表示します。 -p
オプションを追加して、差分を表示できます。
git stash show -p
興味のあるスタッシュが最新のものではない場合、スタッシュの名前をコマンドの最後に追加します。
git stash show -p stash@{2}
Stashの現在のリストを表示するには:
git stash list
次のようなリストが表示されます。
stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...
これらの隠し場所の差分を表示するには:
git stash show -p stash@{n}
私はgitリポジトリを視覚化するgitk
のグラフィカルUIのファンです。最後に隠されたアイテムを表示できます:
gitk stash
(git stash list
でリストされているように)隠された変更を表示することもできます。例えば:
gitk stash@{2}
以下のスクリーンショットでは、左上にstashがコミットとして表示され、コミット履歴のいつどこから来たのか、右下に変更されたファイルのリスト、下の行ごとの差分が表示されます。 -左。隠し場所はまだ隠れています。
ポップされていないスタッシュのすべての変更を表示するには:
git stash show -p stash@{0}
ポップされていない隠し場所にある特定のファイルの変更を表示するには:
git diff HEAD stash@{0} -- path/to/filename.php
git stash apply
を使用してstashを適用するだけですか?これはスタッシュを削除しないため、変更が気に入らなければ、スタッシュされた作業を失うことなく作業ツリーをリセットできます。そして、それらが気に入ったら、git stash drop
を使用して単純に隠しておくことができます。
gitでstashの内容をプレビューすることは可能ですか? のgitkの推奨事項を超えて、 tig をインストールしてtig stash
を呼び出すことができます。このフリー/オープンconsoleプログラムでは、比較するスタッシュを選択することもできます。
次のコマンドを使用して、すべてのスタッシュのリストを表示できます。
$ 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
これを使用して、色の違いを強調表示してすべてのスタッシュを表示します(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 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.
はい、変更内容を確認する最良の方法は、次のようなファイルに保存することです。
git stash show -p stash@{0} > stash.txt
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^!"
ファイル名のみ:
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
を追加してください。
隠された変更のリストを表示する
git stash list
特定のスタッシュで変更されたファイルのリストを表示するため
git stash show -p stash@{0} --name-only
Stashで特定のファイルを表示するため
git show stash@{0} path/to/file
使用することを提案する既存の回答に加えて(最後から3番目のスタッシュの差分を表示するため)
git stash show -p stash@{2}
スタッシュは、スタッシュインデックスのみを指定することによっても参照できます(たとえば、整数
n
はstash@{n}
と同等です)。
したがって、使用することもできます(これは上記のコマンドと同等です)
git stash show -p 2
Powershellの問題 も回避する必要があります。
次のコマンドを使用して、他のスタッシュ、コミット、ブランチ、またはHEADから、スタッシュされた変更の差分を再抽出できます。
git stash show
git show
git diff
git difftool
上記の各コマンドの使用方法を見てみましょう。
単純なコマンドgit stash showは、ファイルの変更の非常に短い要約を提供しますが、現在のHEADに対する変更の差分は表示しません。
コマンドgit-showは、さまざまなタイプのオブジェクトを見るために使用されます。
Git-showコマンドは、stashの変更を視覚化するためだけでなく、ブロブ、ツリー、タグ、コミットなどの1つ以上のオブジェクトを表示するためにも使用されます。
コマンド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}-
コマンド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/