我经常把工作放在以后,然后其他的东西出现,几周后,我想检查藏匿,并找出如果我将它应用于当前状态的工作树会发生什么变化。
我知道我可以在藏匿处做一个git diff,但是这显示了工作树和藏匿之间的所有差异,而我只是想知道什么存储应用会改变。
我怎样才能做到这一点?
#1楼
要查看当前的藏匿列表:
git stash list
你会看到这样的列表:
stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...
要在任何这些藏匿处查看差异:
git stash show -p stash@{n}
#2楼
我是gitk
用于可视化git repos的图形UI的粉丝。 您可以查看最后一个藏匿的项目:
gitk stash
您还可以使用查看任何隐藏的更改(由git stash list
)。 例如:
gitk stash@{2}
在下面的屏幕截图中,您可以在左上角看到存储作为提交,在提交历史记录中显示的时间和位置,右下角修改的文件列表以及下部的逐行差异-剩下。 隐藏的东西仍然隐藏起来。
#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
(改编自Git:在没有应用存储的情况下查看存储中的内容 )
#4楼
除了gitk推荐之外是否有可能在git中预览藏匿内容? 你可以安装tig并调用tig stash
。 这个免费/开放的控制台程序还允许您选择要比较的存储
#5楼
要查看未弹出的存储库中的所有更改:
git stash show -p stash@{0}
要在未弹出的存储中查看某个特定文件的更改:
git diff HEAD stash@{0} -- path/to/filename.php
#6楼
git stash show
将显示最近存储中更改的文件。 您可以添加-p
选项以显示差异。
git stash show -p
如果您感兴趣的存储不是最新的存储,则将存储的名称添加到命令的末尾:
git stash show -p stash@{2}
#7楼
首先,我们可以使用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}
而不是stash@{2}
。 为了解决这个问题,我们需要使用单引号作为括号:
git stash show stash@'{2'}
com/java/myproject/my-xml-impl.xml | 16 ++++++++--------
com/java/myproject/MyJavaClass.java | 16 ++++++++--------
etc.
#8楼
您可以通过以下命令查看所有存储列表:
$ 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
#9楼
显示所有藏匿处
仅文件名:
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关闭当前存储的寻呼机。 如果您希望将其包含在文件中,请将> stashes.diff
附加到命令中。
#10楼
查看隐藏更改列表
git stash list
用于查看在特定存储中更改的文件列表
git stash show -p stash@{0} --name-only
用于在藏匿处查看特定文件
git show stash@{0} path/to/file
#11楼
是的,查看修改内容的最佳方法是保存在文件中:
git stash show -p stash@{0} > stash.txt
#12楼
当第一次提出这个问题时,这可能不是一个选项,但是,如果你使用PyCharm,你可以使用UnStash Changes
工具(VCS-> Git-> UnStash Changes ...)。 这允许您查看隐藏的更改列表,以及弹出,删除,清除或应用(如果需要,可以进入新分支):
并在每个存储中查看已更改的文件:
以及每个文件的差异。 在差异中,您可以挑选单个更改以应用从隐藏的更改到工作分支(使用左指V形符号):
#13楼
除了建议使用的现有答案(显示第三个到最后一个藏匿的差异)
git stash show -p stash@{2}
请注意,在git-stash
文档中 ,它是写的
也可以通过仅指定存储索引来引用状态(例如,整数
n
等于stash@{n}
)。
因此也可以使用(这相当于上面的命令)
git stash show -p 2
这也应该避免一些Powershell问题 。
#14楼
我喜欢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^!"
#15楼
以下命令可用于提取任何其他存储或提交或分支或HEAD的存储更改的区别。
git stash show
git show
git diff
git difftool
让我们看看,我们如何使用上述每个命令。
- git stash show
简单的命令git stash show给出了文件更改的简短摘要,但不会显示针对当前HEAD的更改差异。
命令git-show用于查看各种类型的对象。
命令git-show不仅用于可视化存储更改,还用于查看一个或多个对象,如blob,树,标记和提交。
命令git-diff也是常用命令之一,用于显示提交,提交和工作树等之间的更改。
默认情况下,除非指定了其他存储引用或提交,否则git diff将显示所选存储的diff(已修改文件)当前状态的存储库。
为了获得最重要的藏匿存储@ {0}和主分支之间的区别:
$ git diff stash @ {0} master
仅显示文件的名称而不是更改的差异:
$ git diff --name-only stash @ {0} master
查看所选文件的选定状态之间的差异:
$ git diff stash @ {0} ^ 1 stash @ {0} -
- git difftool
命令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中提取diff的命令。
使用命令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/