如何才能看到取消对当前工作树的更改?我想知道在应用它们之前会做出哪些改变!
查看最新的藏匿处:
git stash show -p
看到任意藏匿:
git stash show -p stash@{1}
从 git stash 联机帮助页:
git stash
默认情况下,该命令显示diffstat,但它将接受git diff已知的任何格式(例如,git stash show -p stash @ {1}以查看补丁形式的第二个最近的存储) .
要查看最近的藏匿信息:
要查看任意存储:
此外,我使用git diff来比较存储与任何分支 .
您可以使用:
git diff stash@{0} master
查看与分支主数据相比的所有更改 .
或者您可以使用:
git diff --name-only stash@{0} master
轻松查找仅更改的文件名 .
如果您的存储更改所基于的分支在此期间已更改,则此命令可能有用:
git diff stash@{0}^!
这将stash与它所基于的提交进行比较 .
If your working tree is dirty ,您可以通过先提交脏工作树,然后将其与存储进行比较,将其与存储进行比较 . 之后,您可以使用脏工作树撤消提交(因为您可能不希望在提交日志中具有该脏提交) .
您还可以使用以下方法来比较两个stashes(在这种情况下,您只需首先弹出其中一个stashes) .
git add . git commit -m "Dirty commit"
git diff HEAD stash@{0}
git reset --soft HEAD~1 git reset .
现在你已经用你的藏匿处肮脏的工作树,并回到你最初的位置 .
这对git版本1.8.5.2适用于我:
git diff stash HEAD
@Magne的answer是唯一一个回答这个问题最灵活/最有用的解释的(非常晚)日期,但它比必要的复杂得多 . 而不是提交和重置,只需存储您的工作副本,比较,然后取消暂停 .
git stash save "temp" git diff stash@{0} stash@{1} git stash pop
通过暂时使您的工作文件夹更改成为存储堆栈的顶部(存储@ {0}),将原始顶部向下移动一个(存储@ {1},这向您显示存储堆栈顶部和工作文件夹之间的差异)然后使用“新设置”位置中的原始顶部进行比较,以便您看到在当前工作之上应用它所带来的更改 .
"But what if I don't have any current work?" 然后你处于正常无聊的情况 . 只需使用@ Amber的答案
git stash show
或@ czerasz的回答
git diff stash@{0}
或承认无论如何都要快速轻松地存储和取消存储,只需解开更改并检查它们 . 如果您不希望它们暂时抛出它们(当前索引/工作文件夹更改) . 完全是这样的
git stash apply git diff git reset git checkout
如果你有差异工具(比如无比)
git difftool stash HEAD
FWIW 这对所有其他答案来说可能有点多余,并且与接受的答案非常相似;但也许它会帮助别人 .
git stash show --help 会给你所需要的一切;包括藏匿显示信息 .
git stash show --help
show [<stash>]将存储中记录的更改显示为隐藏状态与其原始父级之间的差异 . 如果没有给出,则显示最新的一个 . 默认情况下,该命令显示diffstat,但它将接受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来关闭提交 - 修改之前,继续删除--dry-运行并遵循详细说明 .
结合我在这个线程和this one中学到的东西,当我想看到"what is inside the stash"时,我首先运行:
git stash show stash@{0}
这将显示修改了哪些文件 . 然后,为了在difftool中获得一个很好的视觉差异,我做:
git difftool --dir-diff stash@{0} stash@{0}^
这将显示针对其父级的给定存储的所有差异 .
您可以在 ~/.gitconfig 中配置diff工具,例如与Meld:
~/.gitconfig
... [diff] tool = meld
她藏匿的名单
git stash list stash@{0}: WIP on feature/blabla: 830335224fa Name Commit stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2
所以得到藏匿号码并做:
你可以做:
但是,如果你想要一个差异(这是显示存储的不同,这就是我写这个答案的原因. Diff consider the current code in your branch and show just show what you will apply )
要么
git diff stash@{0} <branch name>
另一个有趣的事情是:
git stash apply git 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 的组合如果你在错误中应用藏匿分支......有时很难恢复你的代码 .
git stash pop
git stash apply
git stash drop
11 回答
查看最新的藏匿处:
看到任意藏匿:
从
git stash
联机帮助页:要查看最近的藏匿信息:
要查看任意存储:
此外,我使用git diff来比较存储与任何分支 .
您可以使用:
查看与分支主数据相比的所有更改 .
或者您可以使用:
轻松查找仅更改的文件名 .
如果您的存储更改所基于的分支在此期间已更改,则此命令可能有用:
这将stash与它所基于的提交进行比较 .
If your working tree is dirty ,您可以通过先提交脏工作树,然后将其与存储进行比较,将其与存储进行比较 . 之后,您可以使用脏工作树撤消提交(因为您可能不希望在提交日志中具有该脏提交) .
您还可以使用以下方法来比较两个stashes(在这种情况下,您只需首先弹出其中一个stashes) .
现在你已经用你的藏匿处肮脏的工作树,并回到你最初的位置 .
这对git版本1.8.5.2适用于我:
@Magne的answer是唯一一个回答这个问题最灵活/最有用的解释的(非常晚)日期,但它比必要的复杂得多 . 而不是提交和重置,只需存储您的工作副本,比较,然后取消暂停 .
通过暂时使您的工作文件夹更改成为存储堆栈的顶部(存储@ {0}),将原始顶部向下移动一个(存储@ {1},这向您显示存储堆栈顶部和工作文件夹之间的差异)然后使用“新设置”位置中的原始顶部进行比较,以便您看到在当前工作之上应用它所带来的更改 .
"But what if I don't have any current work?" 然后你处于正常无聊的情况 . 只需使用@ Amber的答案
或@ czerasz的回答
或承认无论如何都要快速轻松地存储和取消存储,只需解开更改并检查它们 . 如果您不希望它们暂时抛出它们(当前索引/工作文件夹更改) . 完全是这样的
如果你有差异工具(比如无比)
FWIW 这对所有其他答案来说可能有点多余,并且与接受的答案非常相似;但也许它会帮助别人 .
git stash show --help
会给你所需要的一切;包括藏匿显示信息 .在不移动任何东西的情况下执行此操作的一种方法是利用
patch
可以读取git diff的事实(基本上统一差异)这将向您显示通常会执行哪些修补程序的分步预览 . 这样做的另一个好处是补丁不会阻止自己将补丁写入工作树,如果由于某种原因你真的需要git来关闭提交 - 修改之前,继续删除--dry-运行并遵循详细说明 .
结合我在这个线程和this one中学到的东西,当我想看到"what is inside the stash"时,我首先运行:
这将显示修改了哪些文件 . 然后,为了在difftool中获得一个很好的视觉差异,我做:
这将显示针对其父级的给定存储的所有差异 .
您可以在
~/.gitconfig
中配置diff工具,例如与Meld:她藏匿的名单
所以得到藏匿号码并做:
你可以做:
但是,如果你想要一个差异(这是显示存储的不同,这就是我写这个答案的原因. Diff consider the current code in your branch and show just show what you will apply )
您可以使用:
要么
另一个有趣的事情是:
这将应用存储而不将其从列表中删除,您可以
git checkout .
删除这些更改,或者如果您对列表中的存储删除感到高兴git stash drop stash@{10}
.从这里我从不建议使用
git stash pop
并使用git stash apply
和git stash drop
的组合如果你在错误中应用藏匿分支......有时很难恢复你的代码 .