我经常将工作放在以后,然后其他东西出现,几周后,我想检查存储,并找出如果我将其应用于当前状态的工作树会发生什么变化。
我知道我可以在藏匿处做一个git diff,但是这显示了工作树和藏匿之间的所有差异,而我只是想知道什么存储应用会发生变化。
我该怎么做?
答案 0 :(得分:616)
git stash show
会显示您最近藏匿中更改的文件。您可以添加-p
选项以显示差异。
git stash show -p
如果您感兴趣的存储不是最新的存储,则将存储的名称添加到命令的末尾:
git stash show -p stash@{2}
答案 1 :(得分:81)
查看当前的藏匿列表:
git stash list
您会看到如下列表:
stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...
要查看任何这些藏匿处的差异:
git stash show -p stash@{n}
答案 2 :(得分:32)
我是gitk
图形用户界面的粉丝,可视化git repos。您可以使用以下内容查看最后一项:
gitk stash
您还可以使用查看任何隐藏的更改(由git stash list
列出)。例如:
gitk stash@{2}
在下面的屏幕截图中,您可以在左上角看到存储作为提交,在提交历史记录中显示的时间和位置,右下角修改的文件列表以及逐行差异在左下角。隐藏的东西一直隐藏起来。
答案 3 :(得分:20)
要查看未弹出的藏匿处中的所有更改:
git stash show -p stash@{0}
要查看未弹出的藏匿处中某个特定文件的更改:
git diff HEAD stash@{0} -- path/to/filename.php
答案 4 :(得分:5)
除Is it possible to preview stash contents in git?中的gitk建议外,您可以安装tig并致电tig stash
。这个免费/开放控制台程序还允许您选择要比较的存储
答案 5 :(得分:3)
我使用它来查看所有带有颜色差异突出显示的藏匿处(在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
答案 6 :(得分:3)
您可以通过以下命令查看所有藏匿列表:
$ 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
答案 7 :(得分:2)
首先,我们可以使用git存储列表来获取所有存储项:
$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>...]'
原因可能是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.
答案 8 :(得分:2)
是的,查看修改内容的最佳方法是保存在文件中:
git stash show -p stash@{0} > stash.txt
答案 9 :(得分:2)
首次提出此问题时,这可能不是一个选项,但是,如果您使用PyCharm,则可以使用UnStash Changes
工具(VCS-&gt; Git-&gt; UnStash Changes ...) 。这允许您查看隐藏的更改列表,以及弹出,删除,清除或应用(如果需要,可以进入新分支):
并查看每个存储的已更改文件:
以及每个文件的差异。在差异中,您可以挑选个别更改,以便从隐藏的更改应用到工作分支(使用左指V形):
答案 10 :(得分:1)
仅限文件名:
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
您将获得彩色差异输出,您可以使用 space ( forward )和 b (向后)进行分页)和 q 关闭当前藏匿的寻呼机。如果您希望将其包含在文件中,请将> stashes.diff
附加到命令中。
答案 11 :(得分:1)
我喜欢gitk
如何向您准确显示未跟踪或位于索引中的内容,但是默认情况下,它将在当前分支上所有其他提交的中间显示那些隐藏的“提交”。 >
诀窍是如下运行gitk:
gitk "stash@{0}^!"
(有引号可以使它在Powershell中工作,但是通过这种方式,它仍然应该在其他Shell中工作。)
如果您在gitrevisions help page中查找此语法,则会发现以下内容:
r1^!
表示法包括commit r1 ,但不包括其所有父代。就其本身而言,此表示法表示单个提交 r1 。
这显然会使gitk处于这样一种模式,即只显示所选提交的直接父级,而这正是我想要的。
如果您想进一步介绍并列出所有存储,则可以运行以下命令:
gitk `git stash list '--pretty=format:%gd^!'`
(反引号内的那些单引号是安抚Bash所必需的,否则会抱怨感叹号)
如果您在Windows上并且使用cmd或Powershell:
gitk "--argscmd=git stash list --pretty=format:%gd^!"
答案 12 :(得分:1)
查看隐藏更改列表
git stash list
用于查看在特定存储中更改的文件列表
git stash show -p stash@{0} --name-only
用于在藏匿处查看特定文件
git show stash@{0} path/to/file
答案 13 :(得分:0)
除了建议使用的现有答案(显示倒数第二个隐藏的差异)
git stash show -p stash@{2}
请注意,在git-stash
documentation中写着
也可以通过仅指定存储索引来引用存储(例如,整数
n
等效于stash@{n}
)。
因此也可以使用(与上面的命令等效)
git stash show -p 2
还应避免使用some Powershell issues。
答案 14 :(得分:0)
以下命令可用于再次提取隐藏更改的差异,使其不影响任何其他存储,提交或分支或HEAD。
git stash show
git show
git diff
git difftool
让我们看看如何使用上述每个命令。
简单的命令git stash show给出了非常简短的更改摘要 文件,但不会显示与当前HEAD的更改差异。
命令git-show用于查看各种类型的对象。
命令git-show不仅用于可视化存储更改,而且还用于 还用于查看一个或多个对象,例如斑点,树木,标签和 提交。
命令git-diff也是常用命令之一,用于 显示提交,提交和工作树等之间的更改。
默认情况下,git diff将显示所选存储的差异 针对(已修改文件)存储库的当前状态,除非有其他存储 已指定引用或提交。
要获取最高级存储@@ {0}与主分支之间的区别:
$ git diff stash @ {0}主用户
仅显示文件名称,而不显示更改差异
$ git diff-仅名称存储@ {0}主机
查看选定文件的选定存储之间的差异:
$ 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/
答案 15 :(得分:0)
您可以使用gitlen extension
查看VSCode中的隐藏更改答案 16 :(得分:0)
几个答案都提到了 -p
上的 --patch
(或 git stash show
)标志
然而,值得一提的是,您可以在显示 Git 存储(即 git stash show stash@{0}
)时将此作为默认行为,方法是使用 git config
:
git config --global stash.showPatch true
...或在您的 .gitconfig 文件中:
[stash]
showPatch = true
这使得 git stash show
在默认情况下表现得像 git show
。如果您只想查看 diffstat(即添加/删除的行的摘要),您仍然可以通过 --stat
标志看到它(同样,与 git show
类似):
git stash show --stat stash@{0}