Answers:
git stash show
会向您显示最近存储中已更改的文件。您可以添加-p
选项以显示差异。
git stash show -p
如果您感兴趣的存储区不是最新存储区,请在命令末尾添加存储区的名称:
git stash show -p stash@{2}
fatal: unable to create temp-file: Invalid argument
-知道为什么吗?
git stash show -p stash@{0}
看具体的藏匿处。0显示最后一个音调,1显示倒数第二个音调。等等,git stash list
将显示所有可用音调。
git stash show -p 'stash@{0}'
git stash show -p stash@{0}> stash.txt
我是gitk
的图形用户界面的粉丝,可以直观地查看git repos。您可以查看存放在以下位置的最后一项:
gitk stash
您还可以使用查看任何隐藏的更改(由列出git stash list
)。例如:
gitk stash@{2}
在下面的屏幕截图中,您可以在左上角看到该存储区作为提交,它在提交历史记录中的时间和位置,在右下方显示了修改的文件列表,在下部显示了逐行差异-剩下。所有的东西都还藏起来了。
stash@{X}
在命令行上提供多个值以一次查看更多结果,但是我还没有找到一种简单的方法来在gitk中说“显示所有存储项”。
gitk stash
似乎gitk stash@{0}
gitk `git stash list --pretty=format:%gd`
然后搜索“ WIP on”以跳转到下一个存储。
gitk --reflog
让您看到所有的藏匿处,以及更多。
除了gitk中的建议之外,是否可以预览git中的隐藏内容?您可以安装tig并致电tig stash
。这个免费/开放的控制台程序还允许您选择要比较的存储区
P
和!
分别键。
gitk
的人来说,破解它以显示所有隐藏项相对容易。
我用它来查看我所有带有颜色差异突出显示的存储区(在Fedora 21上):
git stash list |
awk -F: '{ print "\n\n\n\n"; print $0; print "\n\n";
system("git -c color.ui=always stash show -p " $1); }' |
less -R
(改编自Git:无需应用存储即可查看存储中的内容)
您可以通过以下命令查看所有存储的列表:
$ git stash list
stash@{0}: WIP on dev: ddd4d75 spelling fix
stash@{1}: WIP on dev: 40e65a8 setting width for messages
......
......
......
stash@{12}: WIP on dev: 264fdab added token based auth
最新的存储是第一个。
您可以简单地选择n
上面列表中提供的存储索引,并使用以下命令查看存储的详细信息
git stash show -p stash@{3}
同样,
git stash show -p stash@{n}
您也可以使用以下命令检查diff:
git diff HEAD stash@{n} -- /path/to/file
首先,我们可以使用git stash list获取所有存储项:
$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...
然后,我们可以利用git stash show stash@{N}
来检查特定存储下的文件N
。如果我们开火,那么我们可能会得到:
$ git stash show stash@{2}
fatal: ambiguous argument 'stash@2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
原因可能是外壳正在吃掉大括号,而git却看stash@2
不到stash@{2}
。要解决此问题,我们需要使用大括号将单引号用作:
git stash show stash@'{2'}
com/java/myproject/my-xml-impl.xml | 16 ++++++++--------
com/java/myproject/MyJavaClass.java | 16 ++++++++--------
etc.
仅文件名:
for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show $i; done
所有存储中的完整文件内容:
for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show -p $i; done
您将获得彩色的diff输出,可以使用space (forward)和b(向后)q进行分页,并关闭当前存储区的分页器。如果您希望将其存储在文件中,请追加> stashes.diff
到命令中。
除了建议使用的现有答案(显示倒数第二个隐藏的差异)
git stash show -p stash@{2}
请注意,在git-stash
文档中,其写为
还可以通过仅指定存储索引来引用存储(例如,整数
n
等于stash@{n}
)。
因此也可以使用(这等效于上面的命令)
git stash show -p 2
这也应该避免一些Powershell问题。
我喜欢 gitk
准确地向您显示未跟踪或位于索引中的内容,但是默认情况下,它将在当前分支上所有其他提交的中间显示这些隐藏的“提交”。
诀窍是如下运行gitk:
gitk "stash@{0}^!"
(有引号可以使它在Powershell中运行,但是通过这种方式,它也应该在其他shell中也可以运行。)
如果您在gitrevisions帮助页面中查找此语法,则会发现以下内容:
该
r1^!
表示法包括提交r1,但不包括其所有父项。该符号本身表示单个提交r1。
显然,这会使gitk处于这样一种模式,即只显示所选提交的直接父级,这正是我喜欢的。
如果要进一步介绍并列出所有存储,则可以运行以下命令:
gitk `git stash list '--pretty=format:%gd^!'`
(反引号内的那些单引号对于安抚Bash是必要的,否则会抱怨感叹号)
如果您在Windows上并使用cmd或Powershell:
gitk "--argscmd=git stash list --pretty=format:%gd^!"
以下命令可用于再次提取隐藏更改的差异,使其与任何其他隐藏,提交或分支或HEAD相同。
git stash show
git show
git diff
git difftool
让我们看看如何使用上述每个命令。
简单的命令git stash show给出了文件更改的非常简短的摘要,但不会显示与当前HEAD的更改差异。
git-show命令用于查看各种类型的对象。
git-show命令不仅用于可视化存储更改,而且还用于查看一个或多个对象(例如blob,树,标签和提交)。
git-diff命令也是常用命令之一,用于显示提交,提交和工作树等之间的更改。
默认情况下,除非指定了其他隐藏引用或提交,否则git diff将显示所选存储与(已修改文件)存储库当前状态的差异。
要获得最高级的stash @ {0}和master分支之间的区别:
$ git diff stash @ {0}主
仅显示文件名称,不显示更改差异:
$ git diff-仅名称存储@ {0} master
查看选定文件的选定存储之间的差异:
$ git diff stash @ {0} ^ 1 stash @ {0}-
git-difftool命令也可用于查找所选存储与所选提交或分支或存储之间的差异
查看最新两个存储之间的区别:
$ git difftool stash @ {0} stash @ {0} ^ 1
git difftool --dir-diff stash @ {0} stash @ {0} ^ 1
摘要:
可以从选定的存储中提取差异的命令git stash show,git show,git diff,git difftool。
使用git stash show命令查看差异,
git stash show -p stash @ {0}
使用命令git show查看隐藏项中的更改,
git show stash @ {1}
使用命令git diff查看最新存储和选定提交之间的区别,
git diff stash @ {0}
参考文献:
https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/
git stash show -p stash@{1} >~/.diff && vim ~/.diff
不必是vim
任何文本编辑器,只要您的文本编辑器具有对diff
输出的语法突出显示支持)。