我怎样能够查看取消暂存所做的更改会对当前工作树产生什么影响?在应用更改之前,我想知道将会进行什么更改!
查看最新的stash:
git stash show -p
查看任意stash:
git stash show -p stash@{1}
来自git stash
的手册:
默认情况下,该命令显示diffstat,但它将接受git diff已知的任何格式(例如,git stash show -p stash@{1}以补丁形式查看第二个最近的存储)。
stash@{0}
是默认值;只有当你想查看之前的暂存时才需要提供参数。 - Cascabel查看最近的暂存内容:
git stash show -p
看到任意存储内容:git stash show -p stash@{1}
另外,我使用git diff将暂存区与任何分支进行比较。
你可以使用:
git diff stash@{0} master
查看与主分支相比的所有更改。
或者您可以使用:
git diff --name-only stash@{0} master
为了轻松查找仅更改的文件名。
git diff stash@{0} master
,则会得到一个针对当前主分支的存储差异(其中包括在制作存储后在主分支上完成的工作),而不是存储将更改的文件/行,这正是该问题所涉及的内容。 - Tom De Leugit difftool --tool=... stash@{0} HEAD
。 - Andre Holznergit diff stash@{0}^ stash@{0}
。 - erikpricegit diff stash@{0} master -- filename
以获取特定文件的更改。 - David如果您的暂存更改所基于的分支在此期间发生了更改,则此命令可能会有用:
git diff stash@{0}^!
这将比较储藏与其基于的提交。
~/.gitconfig
中添加了一个别名:laststash = diff stash@{0}^!
。 - sbeamgit difftool stash^!
用于比较最后一个储藏与其所基于的提交之间的差异, git difftool stash HEAD
用于比较最后一个储藏与当前提交之间的差异(对于以前的储藏使用 stash@{n}
)。 - ChrisVgit diff 'stash@{0}^!'
- trusktr根据您想将存储区与哪个内容进行比较(本地工作树/父提交/HEAD提交),实际上有几个可用的命令,其中包括古老的git diff
和更具体的git stash show
:
将stash与以下内容进行比较↓ | git diff | git stash show |
---|---|---|
本地工作树 | git diff stash@{0} |
git stash show -l |
父提交 | git diff stash@{0}^ stash@{0} |
git stash show -p |
HEAD提交 | git diff stash@{0} HEAD |
/ |
虽然git stash show
在第一眼看上去更易于使用,但git diff
实际上更强大,因为它允许指定文件名以获得更专注的差异。我个人已经在我的zsh git插件中为所有这些命令设置了别名。
git stash show -l
时,出现了 error: switch 'l' requires a value
的错误。 - mmmmgit diff "stash@{0}"
)。 - Matthew Thomas提交您的脏工作树:
git add .
git commit -m "Dirty commit"
将暂存区与该提交进行差异比较:
git diff HEAD stash@{0}
然后,之后您可以将提交还原,并将其放回工作目录:
git reset --soft HEAD~1
git reset .
现在你已经将脏的工作树与你的藏匿比较,并回到最初的状态。 git stash show -l
。它是否将最新的存储与工作(脏)副本进行比较?如何在不出现 error: switch l requires a value
的情况下使用它? - Magnegit stash show -l
即可使用它。至于为什么它对您无效,我只能猜测您可能正在使用旧版本的git?我正在使用git v2.20.1,并且它可以无误地运行。 - David Deprost@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 stash save -u
命令来储藏未跟踪的文件。 - mleonard以防万一,比较工作区和stash中的文件,请使用以下命令
git diff stash@{0} -- fileName (with path)
在Git版本1.8.5.2上,这对我有效:
git diff stash HEAD
git stash apply
应用的内容非常不同。 - MikeJansen如果你有用于比较差异的工具(如Beyond Compare)
git difftool stash HEAD
git stash apply
应用的内容非常不同。 - MikeJansenHEAD
。 我可以修改@yerlilbilgin的答案以删除HEAD,但我认为任何使用git的人都可以找出这部分内容,而我增加答案的长度会使它难以阅读。 对@yerlibilgin没有责备。 - Sridhar Sarnobatgit diff <current-branchname>..stash@{0}
是比较本地工作树和最近的stash之间更改的最直观的方法。根据需要将stash@{0}
替换为适用的stash编号。
请注意,git diff stash@{0}
可能会产生误导性的结果。如果您的stash和当前分支的两个历史记录发生了分歧,则差异将看起来像您正在添加所有新的内容到您的stash并删除当前分支中唯一的所有内容。
基于git book的答案
此外,请注意双点..
和三点...
指定不同的提交比较,我在此回答中指的是双点。有关详细信息,请参见git书籍
tig
的存储视图感兴趣。 https://jonas.github.io/tig/doc/manual.html - undefined