是否可以在git中预览藏匿内容?

我经常把工作放在以后,然后其他的东西出现,几周后,我想检查藏匿,并找出如果我将它应用于当前状态的工作树会发生什么变化。

我知道我可以在藏匿处做一个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}

在下面的屏幕截图中,您可以在左上角看到存储作为提交,在提交历史记录中显示的时间和位置,右下角修改的文件列表以及下部的逐行差异-剩下。 隐藏的东西仍然隐藏起来。

gitk查看藏匿处


#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

让我们看看,我们如何使用上述每个命令。

  1. git stash show

简单的命令git stash show给出了文件更改的简短摘要,但不会显示针对当前HEAD的更改差异。

  1. git show

命令git-show用于查看各种类型的对象。

命令git-show不仅用于可视化存储更改,还用于查看一个或多个对象,如blob,树,标记和提交。

  1. git diff

命令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} -

  1. 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/

https://git-scm.com/docs/git-show

https://git-scm.com/docs/git-stash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值