如何查看取消隐藏将对当前工作树所做的更改?我想知道在应用它们之前将进行哪些更改!


当前回答

我相信gitdiff<currentbranchname>。。stash@{0}是比较本地工作树和最新stash之间变化的最直观方法。根据需要,用适用的存储编号替换存储@{0}。

请注意,git diff stash@{0}可能会产生误导性结果。如果您的存储和当前分支的两个历史记录发生了分歧,那么差异看起来就像您在存储中添加了所有新的内容,并删除了当前分支特有的所有内容。

基于git手册的答案

此外,请注意双点。。和三点。。。指定不同的提交比较,我指的是这个答案的双点。有关详细信息,请参阅git手册

其他回答

不管好坏这可能对所有其他答案都有点多余,并且与当场接受的答案非常相似;但也许这会帮助别人。

git stash show--帮助将为您提供所需的一切;包括隐藏显示信息。

显示[<stash>]将存储中记录的更改显示为存储状态与其原始父级之间的差异。如果没有,则显示最新的。默认情况下,该命令显示diffstat,但它将接受gitdiff已知的任何格式(例如,git stash show-p stash@{1}以补丁形式查看第二个最新的stash)。您可以使用stash.showStat和/或stash.showPatch配置变量来更改默认行为。

@Magne的回答是迄今为止(很晚)唯一一个对这个问题做出最灵活/最有用解释的答案,但它比必要的要复杂得多。而不是提交和重置,只需隐藏工作副本,进行比较,然后取消显示。

git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop

这向您展示了存储堆栈顶部和工作文件夹之间的差异,方法是暂时将工作文件夹更改变为存储堆栈顶部(stash@{0}),将原始顶部向下移动一个(stash@{1}),然后在“新集合”位置使用原始顶部进行比较,以便您看到将其应用于当前工作顶部所产生的更改。

“但如果我现在没有任何工作怎么办?”那么你就处于正常的无聊状态。只需使用@Amber的答案

git stash show

或者@czerasz的回答

git diff stash@{0}

或者承认隐藏和取消隐藏是快速和容易的,只要取消隐藏更改并检查它们即可。如果你现在不想要它们,就扔掉它们(当前的索引/工作文件夹更改)。完全是这样

git stash apply
git diff
git reset
git checkout

以防万一,要比较工作树和存储库中的文件,请使用以下命令

git diff stash@{0} -- fileName (with path)

一种不移动任何东西的方法是利用补丁可以读取gitdiff(基本上是统一的diff)这一事实

git stash show -p | patch -p1 --verbose --dry-run

这将向您展示补丁通常会做什么的一步一步的预览。这样做的额外好处是,补丁也不会阻止自己将补丁写入工作树,如果出于某种原因,您确实需要git在修改之前停止提交,请继续删除,然后按照详细的说明运行。

她列出了藏匿物品的清单

git stash list 
stash@{0}: WIP on feature/blabla: 830335224fa Name Commit
stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2

因此,获取存储编号并执行以下操作:

您可以执行以下操作:

 git stash show -p stash@{1}

但如果你想要一个diff(这与显示隐藏不同,这就是我写这个答案的原因。diff考虑分支中的当前代码,show只是显示你将应用的内容)

您可以使用:

git diff stash@{0}

or

git diff stash@{0} <branch name>

另一件有趣的事情是:

git stash apply
git stash apply stash@{10}

这将在不从列表中删除的情况下应用隐藏,您可以进行git结帐。删除这些更改,或者如果你很高兴git stash drop stash@{10},从列表中删除一个stash。

从这里开始,我从不建议使用git stash pop,并使用gitstash apply和gitstash drop的组合。。。有时候很难恢复代码。