web-dev-qa-db-ja.com

stashで作業コピーの差分をgitで実行できます

現在の作業コピーを隠し場所と比較するにはどうすればよいですか?

私の使用例:作業コピーにはすでにstash@{0}の変更のサブセットが含まれていますが、適用したくないallstash@{0}の変更。 stash@{0}の望ましい変更のうち、作業コピーにまだ欠けているものがあるかどうかを判断するために、diffを実行したいと思います。

51

最新の隠し場所だった場合は、git diff stash@{0}はそれを行います。そうでない場合は、git stash listは、比較するスタッシュのインデックスを取得します。

36
Andy

OPは、作業コピーに存在するファイル以外にstashにどのような違いがあるかを確認するための答えを求めていたと思います。

次のコマンドは、stashの内容を示しています。

git stash show -p stash@{0}
14
niksvp

作業コピーをコミットまたは隠しておかなければ、これを行うことはできません。隠蔽はおそらく低リスクです:

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の回答 を参照してください。

9
Max Wallace

作業ツリーがダーティの場合、ダーティ作業ツリーをコミットしてからスタッシュと比較することで、スタッシュと比較できます。その後、作業履歴のコミットを取り消すことができます(履歴をきれいに保つため)。

  • 汚い作業ツリーをコミットします。

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

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

    git reset --soft HEAD~1
    git reset .
    

これで、汚れた作業ツリーを隠し場所と比較し、最初の状態に戻りました。

9
Magne

git stash show -lを使用できます。それは余分な隠し場所やコミットなしであなたが欲しいものを示しています。

3
MOHRE

作業ディレクトリにあるファイルまたはフォルダーとstashにあるファイルまたはフォルダーを比較するには、次のようにします。

git diff stash@{0} -- /path/to/fileorfolder

ここでstash@{0}はコミットHASHを表すだけなので、git diffと同じように機能します。 stash@{0}は単なるハンドラです。

2
alpha_989

Unix diffコマンドは、次のように2つのGitコマンドと組み合わせて使用​​できます。

diff <(git diff) <(git stash show -p stash@{0})

もちろん、stash @ {0}を任意のstashに変更できます。このコマンドは、実際の作業ディレクトリ(git diff)をスタッシュの1つと実際に比較しています。

[〜#〜]更新[〜#〜]

colordiffをインストールして、はるかに優れた結果を表示することもできます。

インストール:

  • Ubuntu/Debian:Sudo apt-get install colordiff
  • OS X:brew install colordiff

次に、コマンドを次のように変更します。

colordiff <(git diff) <(git stash show -p stash@{0})
1
Petros Mitakos

OPが何を望んでいるかはわかりませんが、これを使用して、スタッシュの実際のdiffセットが何であるかを確認します。

git difftool stash@{0}^!

または

git diff stash@{0}^!

または

git diff stash@{0}^! > patchfile

0
Wayne Walker
diff <(git diff --color) <(git stash show -p --color)
diff <(git diff --color) <(git stash show -p --color stash@{1})

@ petros-mitakos answerthis one に基づいてgit --colorオプションとgit diffの色を表示するdiffの機能について。

0
o.v