我想检查一个隐藏,并找出它会做出什么改变,如果我将它应用到工作树在其当前状态。
我知道我可以在stash上做一个git差异,但这向我展示了工作树和stash之间的所有差异,而我只是想知道stash应用将会改变什么。
我想检查一个隐藏,并找出它会做出什么改变,如果我将它应用到工作树在其当前状态。
我知道我可以在stash上做一个git差异,但这向我展示了工作树和stash之间的所有差异,而我只是想知道stash应用将会改变什么。
Git存储显示将显示您最近存储中更改的文件。您可以添加-p选项来显示差异。
git stash show -p
如果你感兴趣的存储不是最近的,那么在命令的末尾添加存储的名称:
git stash show -p stash@{2}
查看当前收藏列表:
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}
在下面的屏幕截图中,您可以在左上方看到作为提交的隐藏,在提交历史中它来自何时和何处,右下方是修改的文件列表,左下方是逐行差异。与此同时,赃物还藏在那里。
我用这个来查看我所有的存储与颜色差异高亮(在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的情况下查看隐藏的内容)
查看所有的变化在一个未弹出的stash:
git stash show -p stash@{0}
要查看一个未弹出的存储中的特定文件的更改:
git diff HEAD stash@{0} -- path/to/filename.php
首先,我们可以使用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
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
显示所有存储
仅限文件名:
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
您将得到彩色的差异输出,您可以用空格(向前)和b(向后)来分页,并用q来关闭当前存储的分页器。如果你想把它放在一个文件中,然后追加>的存储。不同于命令。
查看已存储更改的列表
git stash list
用于查看特定存储中更改的文件列表
git stash show -p stash@{0} --name-only
用于查看stash中的特定文件
git show stash@{0} path/to/file
当这个问题第一次被问到的时候,这可能不是一个选项,但是,如果你使用PyCharm,你可以使用UnStash Changes工具(VCS->Git->UnStash Changes…)这允许你查看隐藏的更改列表,以及弹出,删除,清除或应用(如果需要,到一个新的分支):
并查看每个stash更改的文件:
以及每个文件的差异。在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 ^ !符号包括commit 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藏匿秀
简单的命令git stash show给出了非常简短的更改摘要 的文件,但不会显示变化的差异与当前的头。
吉特秀
git-show命令用于查看各种类型的对象。 git-show命令不仅用于可视化存储更改,而且 也用于查看一个或多个对象,如斑点,树,标签和 提交。
git diff
git-diff命令也是常用的命令之一 显示提交、提交和工作树等之间的更改。 默认情况下,git diff将显示所选stash的diff 对(修改的文件)存储库的当前状态,除非有其他存储 指定引用或提交。
获取top most stash@{0}和master branch之间的差异:
git diff stash@{0} master
只显示文件的名称,而不是变化的差异:
git diff --name-only stash@{0} master
查看选定文件的选定存储之间的差异:
git diff stash@{0}^1 stash@{0} -- <filename>
git difftool
git-difftool命令也可以用来查找差异between 选定的存储和选定的提交或分支或存储
查看最近两次存储之间的差异:
git difftool stash@{0} stash@{0}^1
git difftool --dir-diff stash@{0} stash@{0}^1
简介:
从选定的stash中提取差异的有用命令:git stash show, git show, git diff, git difftool。
看到差异使用命令git stash显示,
git stash show -p stash@{0}
使用命令git show查看隐藏的变化,
git show stash@{1}
使用命令git diff查看最新存储和选择提交之间的区别,
git diff stash@{0} <commit-hash>
引用:
https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/
https://git-scm.com/docs/git-show
https://git-scm.com/docs/git-stash
一些回答提到了git存储显示上的-p(或——patch)标志
然而,值得一提的是,在显示Git存储时,可以将此设置为默认行为。Git stash显示stash@{0}),或者使用Git配置:
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}
git stash show -p <index number of stash stack>
查找索引号:
Git藏匿清单
示例:git stash show -p 1