Answers:
查看最新的存储:
git stash show -p
查看任意存储:
git stash show -p stash@{1}
从git stash
手册页:
默认情况下,该命令显示diffstat,但是它将接受git diff已知的任何格式(例如,git stash show -p stash @ {1}以补丁程序形式查看最近的第二个stash)。
stash@{0}
是默认值;如果您想查看以前的存储,则只需要一个参数。
{0}
。
-p
?
要查看最新存储:
git stash show -p
要查看任意存储:
git stash show -p stash@{1}
另外,我使用git diff比较存储与任何分支。
您可以使用:
git diff stash@{0} master
查看与分支主服务器相比的所有更改。
或者您可以使用:
git diff --name-only stash@{0} master
为了轻松查找仅更改的文件名。
git diff stash@{0} master
,则将获得与当前母版的存储差异(包括存储后在母版上完成的工作)而不是隐藏文件将要更改的文件/行,这就是问题所在。
git difftool --tool=... stash@{0} HEAD
git diff stash@{0}^ stash@{0}
git diff stash@{0} master -- filename
以将更改保存到特定文件。
如果您隐匿的更改所基于的分支同时已更改,则此命令可能有用:
git diff stash@{0}^!
这会将存储与它基于的提交进行比较。
~/.gitconfig
:laststash = diff stash@{0}^!
git difftool stash^!
基于它的最后一个存储区与提交git difftool stash HEAD
的差异,基于当前的最后存储区(较早的存储区的stash @ {n})的
如果您的工作树是脏的,则可以通过先提交脏的工作树,然后将其与存储进行比较,将其与存储进行比较。之后,您可以使用脏工作树撤消提交(因为您可能不想在提交日志中拥有该脏提交)。
您还可以使用以下方法将两个存储区相互比较(在这种情况下,您首先只是弹出其中一个存储区)。
提交您的脏工作树:
git add .
git commit -m "Dirty commit"
用提交区分存储:
git diff HEAD stash@{0}
然后,之后,您可以还原提交,并将其放回工作目录中:
git reset --soft HEAD~1
git reset .
现在,您已经将肮脏的工作树与存储区进行了区分,然后又回到了最初的状态。
git stash show -l
。是否会将最新存储与工作(脏)副本进行比较?您如何使用它而不会得到error: switch l requires a value
?
git stash show -l
。至于为什么它对您不起作用,我只能猜测您使用的是旧版本的git?我使用的是git v2.20.1,它可以完美无误地工作。
@Magne的答案是唯一(最晚)回答最灵活/最有用的问题解释的日期,但是它比必要的要复杂得多。无需提交和重置,只需存储工作副本,进行比较然后取消存储即可。
git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop
通过暂时使工作文件夹更改成为存储堆栈的顶部(stash @ {0}),将原始顶部向下移动一个(存储@ {1}),可以显示存储堆栈顶部和工作文件夹之间的差异),然后使用“新设置”位置的原始顶部进行比较,这样您就会看到将其应用于当前工作之上会导致的更改。
“但是如果我目前没有任何工作怎么办?” 然后,您处于正常的无聊情况。只需使用@Amber的答案
git stash show
或@czerasz的答案
git diff stash@{0}
或承认无论如何都可以轻松进行存储和取消存储,只需取消存储更改并检查它们即可。如果您暂时不希望将它们扔掉(当前索引/工作文件夹会更改)。完全是
git stash apply
git diff
git reset
git checkout
git stash save -u
这对我适用于git版本1.8.5.2:
git diff stash HEAD
git stash apply
。
如果您有差异工具(例如无法比较)
git difftool stash HEAD
git stash apply
。
HEAD
。我可以修改@yerlilbilgin的答案以删除HEAD,但我认为使用git的任何人都可以弄清楚该部分,而我加长答案会降低可读性。不要责怪@yerlibilgin。
FWIW 这对于所有其他答案可能有点多余,并且与当场接受的答案非常相似。但也许会帮助某人。
git stash show --help
会给你你需要的一切;包括隐藏节目信息。
显示[<stash>]
将存储在存储中的更改显示为隐藏状态与其原始父项之间的差异。如果没有给出,则显示最新的。默认情况下,该命令显示diffstat,但是它将接受git diff已知的任何格式(例如,git stash show -p stash @ {1}以补丁程序形式查看最近的第二个stash)。您可以使用stash.showStat和/或stash.showPatch配置变量来更改默认行为。
她藏匿的清单
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
考虑您分支中的当前代码,show
仅显示您将应用的内容)
您可以使用:
git diff stash@{0}
要么
git diff stash@{0} <branch name>
另一个有趣的事情是:
git stash apply
git stash apply stash@{10}
这将应用存储区而不将其从列表git checkout .
中删除,您可以删除那些更改,或者如果您git stash drop stash@{10}
愿意从列表中删除存储区。
在这里,我从来不推荐使用git stash pop
和使用的组合git stash apply
和git stash drop
如果你在错误的分支应用藏匿......嗯,有时难以收回你的代码。
根据要与存储区进行比较的内容(本地工作树/父提交/头提交),实际上有几个命令可用,其中包括old old git diff
和更具体的命令git stash show
:
╔══════════════════════╦═══════════════════════════════╦═══════════════════╗
║ Compare stash with ↓ ║ git diff ║ git stash show ║
╠══════════════════════╬═══════════════════════════════╬═══════════════════╣
║ Local working tree ║ git diff stash@{0} ║ git stash show -l ║
║----------------------║-------------------------------║-------------------║
║ Parent commit ║ git diff stash@{0}^ stash@{0} ║ git stash show -p ║
║----------------------║-------------------------------║-------------------║
║ HEAD commit ║ git diff stash@{0} HEAD ║ / ║
╚══════════════════════╩═══════════════════════════════╩═══════════════════╝
虽然git stash show
乍一看看起来对用户更友好,但git diff
实际上它更强大,因为它允许为更集中的差异指定文件名。我已经在zsh git plugin中为所有这些命令设置了别名。