現在の作業コピーを隠し場所と比較するにはどうすればよいですか?
私の使用例:作業コピーにはすでにstash@{0}
の変更のサブセットが含まれていますが、適用したくないallstash@{0}
の変更。 stash@{0}
の望ましい変更のうち、作業コピーにまだ欠けているものがあるかどうかを判断するために、diffを実行したいと思います。
最新の隠し場所だった場合は、git diff stash@{0}
はそれを行います。そうでない場合は、git stash list
は、比較するスタッシュのインデックスを取得します。
OPは、作業コピーに存在するファイル以外にstashにどのような違いがあるかを確認するための答えを求めていたと思います。
次のコマンドは、stashの内容を示しています。
git stash show -p stash@{0}
作業コピーをコミットまたは隠しておかなければ、これを行うことはできません。隠蔽はおそらく低リスクです:
git add -A # Stage all changes in your working copy.
git stash save --keep-index # Stash your working copy and leave it intact
git diff stash@{0} stash@{1}
比較のために作成したスタッシュを取り除くには、git stash pop
またはgit stash drop stash@{0}
を使用します。
代わりにcommitを使用する場合は、 @ Magneの回答 を参照してください。
作業ツリーがダーティの場合、ダーティ作業ツリーをコミットしてからスタッシュと比較することで、スタッシュと比較できます。その後、作業履歴のコミットを取り消すことができます(履歴をきれいに保つため)。
汚い作業ツリーをコミットします。
git add .
git commit -m "Dirty commit"
そのコミットで隠し場所を比較します。
git diff stash@{0}
その後、コミットを元に戻して、作業ディレクトリに戻すことができます。
git reset --soft HEAD~1
git reset .
これで、汚れた作業ツリーを隠し場所と比較し、最初の状態に戻りました。
git stash show -l
を使用できます。それは余分な隠し場所やコミットなしであなたが欲しいものを示しています。
作業ディレクトリにあるファイルまたはフォルダーとstashにあるファイルまたはフォルダーを比較するには、次のようにします。
git diff stash@{0} -- /path/to/fileorfolder
ここでstash@{0}
はコミットHASHを表すだけなので、git diff
と同じように機能します。 stash@{0}
は単なるハンドラです。
Unix diffコマンドは、次のように2つのGitコマンドと組み合わせて使用できます。
diff <(git diff) <(git stash show -p stash@{0})
もちろん、stash @ {0}を任意のstashに変更できます。このコマンドは、実際の作業ディレクトリ(git diff)をスタッシュの1つと実際に比較しています。
[〜#〜]更新[〜#〜]
colordiffをインストールして、はるかに優れた結果を表示することもできます。
インストール:
次に、コマンドを次のように変更します。
colordiff <(git diff) <(git stash show -p stash@{0})
OPが何を望んでいるかはわかりませんが、これを使用して、スタッシュの実際のdiffセットが何であるかを確認します。
git difftool stash@{0}^!
または
git diff stash@{0}^!
または
git diff stash@{0}^! > patchfile