web-dev-qa-db-ja.com

隠し場所に対するGit diff

隠している作業中の作業ツリーにどのような変更が加えられるのかを確認するにはどうすればよいですか。適用する前にどのような変更が行われるのかを知りたいです。

1134
Arcabard

最新の隠し場所を見てください。

git stash show -p

任意の隠し場所を見てください:

git stash show -p stash@{1}

git stashマンページから:

デフォルトでは、このコマンドはdiffstatを表示しますが、git diffで知られている任意の形式を受け入れます(たとえば、パッチ形式で2番目に最近のstashを表示するには、git stash show -p stash @ {1})。

1570
Amber

最新の隠し場所を見るには:

git stash show -p

任意の隠し場所を見るには:

git stash show -p stash@{1}

また、私はgit diffを使って隠し場所をあらゆる枝と比較します。

あなたが使用することができます:

git diff stash@{0} master

ブランチマスターと比較してすべての変更を確認します。


または、次のものを使用できます。

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

変更したファイル名だけを簡単に見つけることができます。

271
czerasz

あなたの隠した変更が基づいているブランチがその間に変更されている場合、このコマンドは役に立つかもしれません:

git diff stash@{0}^!

これは隠し場所とそれが基づいているコミットを比較します。

85
t.heintz

あなたの作業ツリーが汚れている場合 、最初に汚れた作業ツリーをコミットしてからそれを隠し場所と比較することによって、それを隠し場所と比較できます。その後、ダーティワーキングツリーを使用してコミットを元に戻すことができます(そのダーティコミットをコミットログに記録したくない場合があるため)。

次の方法で2つの隠し場所を比較することもできます(その場合は、最初に片方の詰め物をポップするだけです)。

  • あなたの汚れた作業ツリーをコミットします。

    git add .
    git commit -m "Dirty commit"
    
  • そのコミットと隠し場所を比較します。

    git diff HEAD stash@{0}
    
  • そして、その後、コミットを元に戻して作業ディレクトリに戻すことができます。

    git reset --soft HEAD~1
    git reset .
    

今、あなたは汚れた作業木をあなたの隠し場所と比較し、そしてあなたが最初にいた場所に戻ってきました。

37
Magne

@ Magneの answer は、質問の最も柔軟で有用な解釈に答える唯一の(非常に遅い)日付ですが、その必要性よりもかなり複雑です。コミットして再設定するのではなく、作業コピーを隠し、比較してから隠します。

git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop

作業フォルダの変更を一時的にスタッシュスタックの最上部になるように(stash @ {0})、元の最上部を1つ下に移動する(stash @ {1})それから、あなたが現在の作品の上にそれを適用することから生じるであろう変化を見るように、「新しいセット」の位置で元の上を使って比較する。

"しかし、私が現在の仕事をしていない場合はどうなりますか?" その後、あなたは通常の退屈なケースにいます。 @ Amberの答えを使うだけ

git stash show

または@ czeraszの回答

git diff stash@{0}

あるいは、隠したり隠したりするのが速くて簡単であることを認め、変更を隠してそれらを検査するだけです。現時点でそれらが不要な場合は、それらを破棄してください(現在のインデックス/作業フォルダの変更)。全部でそれは

git stash apply
git diff
git reset
git checkout
20
SensorSmith

これは私にとってgitバージョン1.8.5.2で動作します。

git diff stash HEAD
18
Rimian

あなたがdiff用のツールを持っているなら(beyond compareのように)

git difftool stash HEAD
9
yerlilbilgin

_ fwiw _ これは、他のすべての回答とは少し重複している可能性があり、よく知られている回答とよく似ています。しかし多分それは誰かを助けるでしょう。

git stash show --helpはあなたがあなたが必要とするべきすべてをあなたに与えるでしょう。隠しショー情報を含む。

show [<stash>]

隠し状態で記録された変更を隠し状態と元の親の間の差分として表示します。 noが与えられると、最新のものが表示されます。デフォルトでは、このコマンドはdiffstatを表示しますが、git diffで知られている任意の形式を受け入れます(たとえば、パッチ形式で2番目に最近のstashを表示するには、git stash show -p stash @ {1})。デフォルトの動作を変更するには、stash.showStatまたはstash.showPatch構成変数、あるいはその両方を使用できます。

1
Rockin4Life33

何も動かさずにこれを行う1つの方法は、patchがgit diffのものを読むことができるという事実を利用することです(基本的にunified diff)。

git stash show -p | patch -p1 --verbose --dry-run

これにより、パッチが通常何をするのかを段階的にプレビューすることができます。これに追加された利点は、何らかの理由でgitが変更前のコミットについて黙って作業を進め、先に進んで--dry-を削除する必要がある場合、patchが自分自身で作業ツリーにパッチを書き込むことを妨げないことです。詳細な指示に従ってください。

1
xenithorb

このスレッドで学んだことと これ で学んだことを組み合わせて、 "stashの中身は何か"を知りたいときには、最初に実行します。

git stash show stash@{0}

それはどんなファイルが修正されたかを示すでしょう。それでは、difftoolでNiceの視覚的差分を取得するために、

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

これは、親に対して与えられた隠し場所のすべての違いを一度に表示します。

Diffツールは~/.gitconfigで設定することができます。 と一緒に

...
[diff]
    tool = meld
1
Ferrard

念のため、作業ツリーと隠し場所のファイルを比較するには、次のコマンドを使用します。

git diff stash{0} -- fileName (with path)
0
Pramod B R

彼女は隠し場所のリスト

git stash list 
stash@{0}: WIP on feature/blabla: 830335224fa Name Commit
stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2

したがって、隠し番号を取得して実行します。

できるよ:

 git stash show -p stash@{1}

ただし、diffが必要な場合(これは隠し場所を表示するのとは異なるため、この答えを書いています。Diffname__はブランチの現在のコードを考慮し、showname__は単に適用するものを表示します) )

次を使用できます。

git diff stash@{0}

または

git diff stash@{0} <branch name>

別の興味深いことは、次のとおりです。

git stash apply
git stash apply stash@{10}

これにより、リストからスタッシュを削除せずに適用されます。git checkout .で変更を削除するか、git stash drop stash@{10}でリストからスタッシュを削除してもかまいません。

ここからgit stash popを使用し、git stash applygit stash dropを組み合わせて使用​​することはお勧めしません。

0
Raúl Martín