git可以用stash做一个工作副本的差异

问题描述 投票:45回答:9

如何将我当前的工作副本与存储区分开来?

我的用例:我的工作副本已经包含了我的stash@{0}中的一部分更改,但我不想在stash@{0}中应用所有更改。我想做一个差异来帮助确定我的工作副本中仍然缺少stash@{0}中哪些可取的变化。

git git-diff git-stash working-copy
9个回答
35
投票

如果这是你最近的藏匿,git diff stash@{0}会这样做。如果没有,您可以使用git stash list获取要与之比较的存储的索引。


14
投票

我认为OP希望得到答案,看看除了工作副本中存在的文件之外,存储包含的区别。

以下命令显示存储包含的内容。

git stash show -p stash@{0}

9
投票

如果您的工作树是脏的,您可以通过首先提交脏工作树,然后将其与存储进行比较,将其与存储进行比较。之后,您可能希望撤消工作树的提交(以保持历史记录清洁)。

  • 提交你的脏工作树: git add . git commit -m "Dirty commit"
  • 使用该提交区分存储: git diff stash@{0}
  • 然后,之后,您可以还原提交,并将其放回工作目录中: git reset --soft HEAD~1 git reset .

现在你已经用你的藏匿处肮脏的工作树,并回到你最初的位置。


7
投票

如果没有提交或存储工作副本,则无法执行此操作。存储可能风险较低:

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 popgit stash drop stash@{0}

如果您想使用提交,请参阅@Magne's answer


2
投票

你可以使用git stash show -l。它显示了你想要的东西,没有额外的藏匿或提交。


2
投票

要使用存储在工作目录中的文件或文件夹的差异,您可以执行以下操作:

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

这里stash@{0}只代表一个提交HASH,所以它的工作原理与git diff一样。 stash@{0}只是一个处理程序。


1
投票

您可以将Unix diff命令与两个Git命令结合使用,如下所示:

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

当然,您可以将存储@ {0}更改为您想要的任何存储。这个命令实际上是将实际工作目录(git diff)与你的一个存储器进行比较。

UPDATE

您还可以安装colordiff并查看更好的结果:

安装:

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

然后只需将命令更改为:

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

0
投票

不确定OP想要什么,但我用它来看看藏匿的实际差异集是什么:

git difftool stash@{0}^!

要么

git diff stash@{0}^!

要么

git diff stash@{0}^! > patchfile


0
投票

是的你可以使用git stash show -p,查看这个Git diff against a stash获取更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.