我怎样才能看到un-stash将对当前工作树所做的更改?我想知道在应用它们之前将进行哪些更改!
查看最新的stash:
git stash show -p
查看任意存储:
git stash show -p stash@{1}
从git stash手册页:
git stash
默认情况下,该命令显示差异,但它将接受任何git diff已知的格式(例如,git stash show-p stash@{1}查看补丁形式的第二个最新藏匿)。
要查看任意藏匿:
此外,我使用git diff将stash与任何分支进行比较。
您可以使用:
git diff stash@{0} master
查看与分支主机相比的所有更改。或者您可以使用:
git diff --name-only stash@{0} master
轻松查找仅更改的文件名。
如果你的工作树很脏,您可以通过首先提交脏工作树,然后将其与存储进行比较来将其与存储进行比较。之后,您可以使用脏工作树撤消提交(因为您可能不想在提交日志中包含该脏提交)。
您还可以使用以下方法相互比较两个藏品(在这种情况下,您只需首先弹出其中一个藏品)。
提交你的脏工作树:
git add .git commit -m "Dirty commit"
Diff the stash with that commit:
git diff HEAD stash@{0}
Then, afterwards, you may revert the commit, and put it back in the working dir:
git reset --soft HEAD~1git reset .
Now you've diffed the dirty working tree with your stash, and are back to where you were initially.
如果您的隐藏更改所基于的分支在此期间发生了更改,则此命令可能有用:
git diff stash@{0}^!
这将存储与它所基于的提交进行比较。
这适用于我的git版本1.8.5.2:
git diff stash HEAD
如果你有diff的工具(比如超越比较)
git difftool stash HEAD
结合我在这个线程和这一个中学到的东西,当我想看到“藏匿点里面有什么”时,我首先运行:
git stash show stash@{0}
这将显示修改了哪些文件。然后,为了在扩散工具中获得漂亮的视觉差异,我这样做:
git difftool --dir-diff stash@{0} stash@{0}^
这将一次显示给定藏匿与其父藏匿的所有差异。
您可以在~/.gitconfig中配置diff工具,例如使用Meld:
~/.gitconfig
...[diff]tool = meld
@Magne的回答是唯一一个到(很晚)日期可以回答这个问题的最灵活/最有用的解释,但它比必要的要复杂得多。与其提交和重置,只需隐藏你的工作副本,比较,然后解封。
git stash save "temp"git diff stash@{0} stash@{1}git stash pop
这向您展示了存储堆栈顶部和工作文件夹之间的差异,方法是暂时使您的工作文件夹更改成为存储堆栈的顶部(stash@{0}),将原始顶部向下移动(stash@{1}),然后在“新集”位置使用原始顶部进行比较,以便您看到将其应用于当前工作顶部会导致的更改。
”””但是如果我没有任何当前的工作吗?那么你就处于正常的无聊情况下。只需使用@Amber的答案
git stash show
或@czerasz的答案
git diff stash@{0}
或者承认存储和卸载是快速而简单的,只需卸载更改并检查它们。如果您现在不想要它们,请将它们(当前索引/工作文件夹更改)扔掉。完整的是
git stash applygit diffgit resetgit checkout
FWIW这对所有其他答案来说可能有点多余,并且与被接受的答案非常相似;但也许它会帮助某人。
git stash show --help会给你所有你需要的;包括藏匿显示信息。
git stash show --help
显示[] 将存储中记录的更改显示为存储状态与其原始父级之间的差异。如果没有,则显示最新的更改。默认情况下,该命令显示差异,但它将接受git diff已知的任何格式(例如,git stash show-p stash@{1}以补丁形式查看第二个最新的存储)。您可以使用stash.showStat和/或stash.showPatch配置变量来更改默认行为。
显示[]
将存储中记录的更改显示为存储状态与其原始父级之间的差异。如果没有,则显示最新的更改。默认情况下,该命令显示差异,但它将接受git diff已知的任何格式(例如,git stash show-p stash@{1}以补丁形式查看第二个最新的存储)。您可以使用stash.showStat和/或stash.showPatch配置变量来更改默认行为。
在不移动任何东西的情况下做到这一点的一种方法是利用patch可以读取git diff的事实(基本上是统一的差异)
patch
git stash show -p | patch -p1 --verbose --dry-run
这将向您展示补丁通常会做什么的逐步预览。额外的好处是补丁也不会阻止自己将补丁写入工作树,如果出于某种原因,您真的需要git在修改之前停止提交,继续并删除-干运行并遵循详细的说明。
她是藏匿的清单
git stash liststash@{0}: WIP on feature/blabla: 830335224fa Name Commitstash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2
因此,获取藏匿编号并执行:
你可以这样做:
但是如果你想要一个差异(这与显示藏匿不同,这就是我写这个答案的原因。
或
git diff stash@{0} <branch name>
另一个有趣的事情是:
git stash applygit stash apply stash@{10}
这将应用存储而不将其从列表中删除,您可以git checkout .删除这些更改,或者如果您很高兴git stash drop stash@{10}从列表中删除存储。
git checkout .
git stash drop stash@{10}
从这里开始,我从不建议使用git stash pop并使用git stash apply和git stash drop的组合如果您在错误的分支中应用了stash……有时很难恢复您的代码。
git stash pop
git stash apply
git stash drop
以防万一,要比较工作树和存储中的文件,请使用以下命令
git diff stash@{0} -- fileName (with path)
根据您想要比较的存储(本地工作树/父提交/头提交),实际上有几个可用的命令,其中包括旧的git diff和更具体的git stash show:
git diff
git stash show -l
git diff stash@{0}^ stash@{0}
git diff stash@{0} HEAD
/
虽然git stash show乍看起来更用户友好,但git diff实际上更强大,因为它允许为更集中的差异指定文件名。我个人在我的zsh git插件中为所有这些命令设置了别名。
我相信git diff <current-branchname>..stash@{0}是比较本地工作树和最新存储之间变化的最直观的方法。根据需要将stash@{0}替换为适用的存储号。
git diff <current-branchname>..stash@{0}
stash@{0}
注意git diff stash@{0}可能会产生误导性的结果。如果您的stash和当前分支的两个历史已经分歧,差异将看起来像您在stash中添加所有新内容并删除当前分支独有的所有内容。
答案基于git book
另外,请注意,双点..和三个点...指定了不同的提交比较,我指的是这个答案的双点。
..
...