对比一个存储区与Git中的差异

1837

我怎样能够查看取消暂存所做的更改会对当前工作树产生什么影响?在应用更改之前,我想知道将会进行什么更改!


16
可能是Is it possible to preview stash application in git?的重复问题。 - quazgar
1
相关帖子请点击此处 - RBT
你可能还对tig的存储视图感兴趣。 https://jonas.github.io/tig/doc/manual.html - undefined
15个回答

6

不需要移动任何东西,有一种方法可以利用patch能够读取git diff(基本上是统一的差异)的事实。

git stash show -p | patch -p1 --verbose --dry-run

这将向您展示补丁通常会执行的逐步预览。这样做的额外好处是,如果出于某种原因您确实需要让git停止在修改前提交,那么补丁也不会阻止自己将补丁写入工作树。请删除--dry-run并按照详细说明进行操作。

5
她拉出了隐藏物清单。
git stash list 
stash@{0}: WIP on feature/blabla: 830335224fa Name Commit
stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2

获取存储号码并执行以下操作:
您可以执行以下操作:
 git stash show -p stash@{1}

但是,如果你想要一份diff(这与显示存储的不同,这就是我写下这个答案的原因。 diff会考虑你分支中的当前代码,而show只会显示你将要应用的内容

你可以使用以下命令:

git diff stash@{0}

或者
git diff stash@{0} <branch name>

另一个有趣的事情是:

git stash apply
git stash apply stash@{10}

这将应用stash而不从列表中删除它,您可以使用git checkout .来删除这些更改,或者如果您满意,可以使用git stash drop stash@{10}从列表中删除stash。

从这里开始,我从不建议使用git stash pop,而是使用git stash applygit stash drop的组合。如果您在错误的分支中应用了stash...有时恢复代码很困难。


4
我发现这里的回答都不完全满足我的使用情况:
做了一些更改,将它们存储起来,想要检查有哪些更改而不应用存储。
我找到的最好的工作树和存储之间的差异是:
git diff stash@{0}

或者简单地:

git diff stash

但这样显示的不对,与我预期相反:新增的行(通常为绿色)被显示为删除(通常为红色),反之亦然。

将差异反转给了我所需的结果:

git diff stash -R

在这一点上,您在存储后运行此命令所得到的结果与在存储之前运行git diff所得到的结果是相同的。

3

结合我在这个帖子和这个中学到的内容,当我想看“存储了什么”的时候,首先运行:

git stash show stash@{0}

这将展示哪些文件被修改了。然后,为了在差异工具中获得漂亮的可视化差异,我执行以下操作:

git difftool --dir-diff stash@{0} stash@{0}^

这将一次显示给定藏匿与其父级的所有差异。
你可以在~/.gitconfig中配置diff工具,例如使用Meld
...
[diff]
    tool = meld

1

FWIW 这可能与所有其他答案有些冗余,非常类似于被接受的答案,这是正确的;但也许它会帮助某人。

git stash show --help将为您提供所有需要的内容,包括stash show信息。

show [<stash>]

显示作为存储状态和其原始父级之间差异的存储记录中记录的更改。 当未给出 时,显示最新的一个。默认情况下,该命令显示diffstat,但它将接受git diff所知的任何格式(例如,git stash show -p stash@ {1}以补丁形式查看第二个最近的stash)。 您可以使用stash.showStat和/或stash.showPatch配置变量来更改默认行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接