現在の作業コピーをスタッシュと比較するにはどうすればよいですか?
私の使用例: 私の作業コピーには既に my の変更のサブセットが含まれていますが、 のすべての変更stash@{0}
を適用したくありません。どの望ましい変更が作業コピーにまだ欠けているかを判断するために diff を実行したいと考えています。stash@{0}
stash@{0}
現在の作業コピーをスタッシュと比較するにはどうすればよいですか?
私の使用例: 私の作業コピーには既に my の変更のサブセットが含まれていますが、 のすべての変更stash@{0}
を適用したくありません。どの望ましい変更が作業コピーにまだ欠けているかを判断するために diff を実行したいと考えています。stash@{0}
stash@{0}
作業ツリーが汚れている場合は、最初に汚れた作業ツリーをコミットしてから、それを隠し場所と比較することで、それを隠し場所と比較できます。その後、(履歴をクリーンに保つために)作業ツリーのコミットを元に戻すことができます。
ダーティな作業ツリーをコミットします。
git add .
git commit -m "Dirty commit"
そのコミットで隠し場所を比較します。
git diff stash@{0}
その後、コミットを元に戻して、作業ディレクトリに戻すことができます。
git reset --soft HEAD~1
git reset .
これで、汚れた作業ツリーを隠し場所と比較し、元の場所に戻りました。
作業コピーをコミットまたはスタッシュしないと、これを行うことはできません。スタッシングはおそらくリスクが低いです。
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}
。
代わりにコミットを使用する場合は、@Magne の回答を参照してください。
次のように、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})
はい、使用できます。詳細については、スタッシュに対するgit stash show -p
この Git diff を確認してください。