78

如何将我当前的工作副本与存储区进行比较?

我的用例:我的工作副本已经包含 my 中更改的子集stash@{0}我不想应用. 我想做一个差异来帮助确定我的工作副本中仍然缺少哪些理想的更改。stash@{0}stash@{0}

4

10 回答 10

52

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

要查看实际工作副本和存储之间的差异,您需要先提交它。然后,您可以回滚提交。

git add -A                   <- Add all the files
git commit -m "temp"         <- commit them
git diff stash@{0}..HEAD     <- diff the commit with your stash
git reset HEAD~              <- roll your commit back
于 2011-11-08T23:53:05.830 回答
22

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

  • 提交你肮脏的工作树:

    git add .
    git commit -m "Dirty commit"
    
  • 使用该提交来区分存储:

    git diff stash@{0}
    
  • 然后,之后,您可以恢复提交,并将其放回工作目录:

    git reset --soft HEAD~1
    git reset .
    

现在你已经用你的 stash 区分了肮脏的工作树,并回到了你最初的位置。

于 2013-01-21T13:34:45.967 回答
17

如果不提交或存储您的工作副本,您将无法执行此操作。藏匿可能风险较低:

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

如果您想改用提交,请参阅@Magne 的回答

于 2016-07-26T20:56:54.713 回答
15

我认为 OP 希望得到答案,看看除了工作副本中存在的文件之外,stash 还包含什么不同。

以下命令显示了 stash 包含的内容。

git stash show -p stash@{0}
于 2014-03-19T04:48:54.030 回答
6

您可以使用git stash show -l. 它无需额外的存储或提交即可显示您想要的内容。

于 2019-02-05T12:37:27.800 回答
3

要对工作目录中存在的文件或文件夹与存储中的文件或文件夹进行比较,您可以执行以下操作:

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

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

于 2018-06-19T16:06:19.057 回答
2

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

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

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

更新

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

安装:

  • Ubuntu/Debian:sudo apt-get install colordiff
  • OS X:冲泡安装 colordiff

然后只需将命令更改为:

colordiff <(git diff) <(git stash show -p stash@{0})
于 2016-12-06T19:07:58.830 回答
0
diff <(git diff --color) <(git stash show -p --color)
diff <(git diff --color) <(git stash show -p --color stash@{1})

基于@petros-mitakos 的回答这篇关于 git --color 选项和 diff 显示 git diff 颜色的能力。

于 2020-03-19T18:37:53.373 回答
0

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

git difftool stash@{0}^!

或者

git diff stash@{0}^!

或者

git diff stash@{0}^! > patchfile

于 2015-12-14T19:45:50.247 回答
-1

是的,您可以使用git stash show -p,检查此 Git diff 与 stash以获取更多信息。

于 2017-02-06T09:38:59.760 回答