Git藏匿默默隐藏/删除分阶段的更改

时间:2017-06-07 22:52:53

标签: git git-stash git-show

问题:

$ git status -s
MM myfile
$ git stash save
$ git show stash@{0}
# Only shows unstaged changes NOT staged changes

# To debug:
$ GIT_TRACE=2 git stash show
trace: exec: 'git-stash' 'show'
trace: run_command: 'git-stash' 'show'
trace: built-in: git 'rev-parse' '--git-dir'
trace: built-in: git 'rev-parse' '--show-toplevel'
trace: built-in: git 'config' '--get-colorbool' 'color.interactive'
trace: built-in: git 'config' '--get-color' 'color.interactive.help' 'red bold'
trace: built-in: git 'config' '--get-color' '' 'reset'
trace: built-in: git 'rev-parse' '--no-flags' '--symbolic' '--sq'
trace: built-in: git 'rev-parse' '--symbolic-full-name' 'refs/stash'
trace: built-in: git 'diff' '--stat' 'aaaa' 'bbbb'
trace: run_command: 'pager'
trace: exec: 'pager'
$ git diff --stat aaaa bbbb
# Shows both staged and unstaged changes
$ git stash apply --index
$ git status -s
MM myfile

为什么git show stash @ {0}没有显示应该是存储的一部分的暂存变化?似乎git-stash默默地将暂存的更改隐藏在存储中。

1 个答案:

答案 0 :(得分:2)

这是因为git show stash@{0}是错误的命令。你想要git stash show stash@{0}

不幸的是,对于隐藏用法,git show是一个非常好的命令,当你要求它显示合并提交时,它会显示一个组合差异。而且,在内部,存储提交具有合并提交的形式(但不是正常的实体),因此组合差异很少都是好的 - 所以git show很高兴显示他们,但显示为空。

由于git stash show非常容易错误/想象为git show stash,因此您会得到非常不良行为。请记住,当你什么也看不见时,可能是一个倒序的词序。

(这也是这里值得注意的是git stash show在藏工作的树比较打击藏匿的父母,没有git stash命令显示藏匿的首页的VS东西。要查看索引与父级,请使用git diff stash@{number}^1 stash@{number}^2。)