スタッシュ解除によって現在の作業ツリーに加えられる変更をどのように確認できますか?適用する前に、どのような変更が行われるのか知りたいです!
14 に答える
最新の隠し場所を参照してください。
git stash show -p
任意の隠し場所を参照してください。
git stash show -p stash@{1}
git stash
マンページから:
デフォルトでは、コマンドはdiffstatを表示しますが、git diffで認識されている任意の形式を受け入れます(たとえば、パッチ形式で2番目に新しいstashを表示するにはgit stash show -p stash @ {1})。
最新の隠し場所を確認するには:
git stash show -p
任意の隠し場所を表示するには:
git stash show -p stash@{1}
また、git diffを使用して、stashを任意のブランチと比較します。
次を使用できます。
git diff stash@{0} master
ブランチマスターと比較したすべての変更を確認します。
または、次を使用できます。
git diff --name-only stash@{0} master
変更されたファイル名のみを簡単に見つけることができます。
隠し変更の基になっているブランチがその間に変更された場合は、次のコマンドが役立つ場合があります。
git diff stash@{0}^!
これは、スタッシュをそれが基づいているコミットと比較します。
作業ツリーが汚れている場合は、最初に汚れた作業ツリーをコミットしてから、それを隠し場所と比較することで、それを隠し場所と比較できます。その後、ダーティな作業ツリーでコミットを取り消すことができます(コミットログにそのダーティなコミットを入れたくない場合があるため)。
次のアプローチを使用して、2つのスタッシュを相互に比較することもできます(この場合、最初にスタッシュの1つをポップするだけです)。
ダーティな作業ツリーをコミットします。
git add . git commit -m "Dirty commit"
そのコミットで隠し場所を比較します。
git diff HEAD stash@{0}
その後、コミットを元に戻して、作業ディレクトリに戻すことができます。
git reset --soft HEAD~1 git reset .
これで、汚れた作業ツリーを隠し場所と比較し、元の場所に戻りました。
隠し場所を比較したいもの(ローカル作業ツリー/親コミット/ヘッドコミット)に応じて、実際にはいくつかのコマンドを使用できます。その中には、古き良きものgit diff
、より具体的なものがありますgit stash show
。
╔══════════════════════╦═══════════════════════════════╦═══════════════════╗
║ Compare stash with ↓ ║ git diff ║ git stash show ║
╠══════════════════════╬═══════════════════════════════╬═══════════════════╣
║ Local working tree ║ git diff stash@{0} ║ git stash show -l ║
║----------------------║-------------------------------║-------------------║
║ Parent commit ║ git diff stash@{0}^ stash@{0} ║ git stash show -p ║
║----------------------║-------------------------------║-------------------║
║ HEAD commit ║ git diff stash@{0} HEAD ║ / ║
╚══════════════════════╩═══════════════════════════════╩═══════════════════╝
git stash show
一見するとユーザーフレンドリーに見えますが、実際git diff
には、より焦点を絞った差分のファイル名を指定できるという点でより強力です。zshgitプラグインでこれらすべてのコマンドのエイリアスを個人的に設定しました。
@Magneの答えは、質問の最も柔軟で有用な解釈に答える唯一の(非常に遅い)日付ですが、必要以上にかなり複雑です。コミットしてリセットするのではなく、作業コピーを隠し、比較してから、解きます。
git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop
これは、作業フォルダーの変更を一時的にstashスタックの一番上(stash @ {0})にし、元の一番上を下に移動する(stash @ {1})ことにより、stashスタックの一番上と作業フォルダーの違いを示しています。 )次に、元のトップを「新しいセット」の位置で使用して比較し、現在の作業の上にそれを適用した結果として生じる変化を確認します。
「でも、現在の仕事がない場合はどうなりますか?」 その後、あなたは通常の退屈なケースにいます。@Amberの答えを使用してください
git stash show
または@czeraszの答え
git diff stash@{0}
または、とにかくスタッシュとアンスタッシュが迅速かつ簡単であることを認め、変更をアンスタッシュして検査するだけです。現時点でそれらを望まない場合は、それらを破棄します(現在のインデックス/作業フォルダーが変更されます)。完全にそれは
git stash apply
git diff
git reset
git checkout
念のため、作業ツリーと隠し場所のファイルを比較するには、次のコマンドを使用します
git diff stash@{0} -- fileName (with path)
これは、gitバージョン1.8.5.2で機能します。
git diff stash HEAD
差分用のツールがある場合(比較を超えて)
git difftool stash HEAD
git diff <current-branchname>..stash@{0}
ローカルの作業ツリーと最新の隠し場所の間の変更を比較する最も直感的な方法だと思います。stash@{0}
必要に応じて、該当するスタッシュ番号と交換してください。
git diff stash@{0}
誤解を招く結果をもたらす可能性があることに注意してください。スタッシュと現在のブランチの2つの履歴が異なる場合、差分は、スタッシュにすべての新しいものを追加し、現在のブランチに固有のすべてを削除しているように見えます。
gitbookに基づく回答
..
また、ダブルドットとトリプルドット...
は異なるコミット比較を指定していることに注意してください。この回答ではダブルドットを参照しています。詳細については、gitブックを参照してください
何も動かさずにこれを行う1つの方法は、patch
git diff(基本的にはunified diff)を読み取ることができるという事実を利用することです。
git stash show -p | patch -p1 --verbose --dry-run
これにより、パッチが通常行うことの段階的なプレビューが表示されます。これに追加された利点は、パッチが作業ツリーへのパッチの書き込みを妨げないことです。何らかの理由で、変更前のコミットについてgitをシャットダウンする必要がある場合は、先に進んで--dry-を削除してください。実行し、詳細な指示に従います。
このスレッドとこのスレッドで学んだことを組み合わせて、「隠し場所の中にあるもの」を見たいときは、最初に次のコマンドを実行します。
git stash show stash@{0}
変更されたファイルが表示されます。次に、difftoolで見栄えのする差分を取得するために、次のようにします。
git difftool --dir-diff stash@{0} stash@{0}^
これにより、指定された隠し場所の親に対するすべての違いが一度に表示されます。
~/.gitconfig
たとえば、Meldを使用してdiffツールを構成できます。
...
[diff]
tool = meld
彼女は隠し場所のリスト
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
します。ブランチ内の現在のコードを検討し、show
適用するものを表示するだけです)
次を使用できます。
git diff stash@{0}
また
git diff stash@{0} <branch name>
もう1つの興味深いことは、次のとおりです。
git stash apply
git stash apply stash@{10}
これにより、リストからスタッシュを削除せずにスタッシュが適用されます。git checkout .
これらの変更を削除するか、リストからスタッシュを削除することに満足git stash drop stash@{10}
している場合は、スタッシュを削除できます。
ここからは、とgit stash pop
の組み合わせを使用することをお勧めしません。間違ったブランチにスタッシュを適用した場合...コードを回復するのが難しい場合があります。git stash apply
git stash drop
FWIW これは、他のすべての回答に対して少し冗長である可能性があり、受け入れられた回答と非常によく似ています。しかし多分それは誰かを助けるでしょう。
git stash show --help
あなたが必要とするすべてをあなたに与えるでしょう。スタッシュショー情報を含みます。
表示[<stash>]
隠し状態と元の親との差分として、隠し場所に記録された変更を表示します。noが指定されている場合は、最新のものを表示します。デフォルトでは、コマンドはdiffstatを表示しますが、git diffで認識されている任意の形式を受け入れます(たとえば、パッチ形式で2番目に新しいstashを表示するにはgit stash show -p stash @ {1})。stash.showStatおよび/またはstash.showPatch構成変数を使用して、デフォルトの動作を変更できます。