我想检查一个隐藏,并找出它会做出什么改变,如果我将它应用到工作树在其当前状态。
我知道我可以在stash上做一个git差异,但这向我展示了工作树和stash之间的所有差异,而我只是想知道stash应用将会改变什么。
我想检查一个隐藏,并找出它会做出什么改变,如果我将它应用到工作树在其当前状态。
我知道我可以在stash上做一个git差异,但这向我展示了工作树和stash之间的所有差异,而我只是想知道stash应用将会改变什么。
当前回答
我用这个来查看我所有的存储与颜色差异高亮(在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:在不应用stash的情况下查看隐藏的内容)
其他回答
我喜欢gitk可以准确地显示哪些是未跟踪的或位于索引中的,但默认情况下,它将在当前分支上的所有其他提交中间显示那些隐藏的“提交”。
诀窍是像下面这样运行gitk:
gitk "stash@{0}^!"
(引用是为了使它在Powershell中工作,但这样它仍然可以在其他shell中工作。)
如果你在gitrevisions帮助页面中查找这个语法,你会发现以下内容:
r1 ^ !符号包括commit r1,但不包括它的所有父类。就其本身而言,这个符号表示单个提交r1。
这显然会将gitk置于这样一种模式,即只显示所选提交的直接父节点,这正是我所喜欢的。
如果你想进一步列出所有的存储,那么你可以运行这个:
gitk `git stash list '--pretty=format:%gd^!'`
(反撇号内的单引号是为了安抚Bash,否则它会抱怨感叹号)
如果您在Windows上并使用cmd或Powershell:
gitk "--argscmd=git stash list --pretty=format:%gd^!"
我喜欢用gitk的图形用户界面来可视化git回购。您可以查看存储的最后一项:
gitk stash
你也可以使用查看你所存储的任何更改(由git stash list列出)。例如:
gitk stash@{2}
在下面的屏幕截图中,您可以在左上方看到作为提交的隐藏,在提交历史中它来自何时和何处,右下方是修改的文件列表,左下方是逐行差异。与此同时,赃物还藏在那里。
我用这个来查看我所有的存储与颜色差异高亮(在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:在不应用stash的情况下查看隐藏的内容)
首先,我们可以使用git的stash列表来获取所有的stash项目:
$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...
然后我们可以使用git stash show stash@{N}来检查特定的stash 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>...]'
原因可能是shell正在消耗花括号,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.
查看已存储更改的列表
git stash list
用于查看特定存储中更改的文件列表
git stash show -p stash@{0} --name-only
用于查看stash中的特定文件
git show stash@{0} path/to/file