我想检查一个隐藏,并找出它会做出什么改变,如果我将它应用到工作树在其当前状态。

我知道我可以在stash上做一个git差异,但这向我展示了工作树和stash之间的所有差异,而我只是想知道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^!"

其他回答

Git存储显示将显示您最近存储中更改的文件。您可以添加-p选项来显示差异。

git stash show -p

如果你感兴趣的存储不是最近的,那么在命令的末尾添加存储的名称:

git stash show -p stash@{2}

查看已存储更改的列表

git stash list

用于查看特定存储中更改的文件列表

git stash show -p stash@{0} --name-only

用于查看stash中的特定文件

git show stash@{0} path/to/file

查看当前收藏列表:

git stash list

你会看到这样一个列表:

stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...

查看差异对任何这些存储:

git stash show -p stash@{n}

我喜欢用gitk的图形用户界面来可视化git回购。您可以查看存储的最后一项:

gitk stash

你也可以使用查看你所存储的任何更改(由git stash list列出)。例如:

gitk stash@{2}

在下面的屏幕截图中,您可以在左上方看到作为提交的隐藏,在提交历史中它来自何时和何处,右下方是修改的文件列表,左下方是逐行差异。与此同时,赃物还藏在那里。

您可以通过以下命令查看所有的存储列表:

$ 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

最新藏的是第一个。

您可以简单地选择上述列表中提供的stash的索引n,并使用以下命令查看已存储的详细信息

git stash show -p stash@{3}

同样的,

git stash show -p stash@{n}

也可以使用以下命令检查diff:

git diff HEAD stash@{n} -- /path/to/file