Git stash молча скрывает / удаляет поэтапные изменения
Проблема:
$ 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 ответ
Это потому что git show stash@{0}
это неправильная команда. Ты хочешь git stash show stash@{0}
,
К сожалению, для использования тайника, git show
это очень хорошая команда, и когда вы просите показать коммит слияния, она показывает комбинированный diff. И, внутренне, stash коммиты имеют форму (но не нормальную сущность) коммитов слияния, так что комбинированный diff редко бывает вообще полезен - так git show
счастлив показать их, но показывает их пустыми.
поскольку git stash show
действительно легко опечатывать / думать как git show stash
Вы получаете очень плохое поведение. Просто помните, что когда вы ничего не видите, это может быть случай перевернутого порядка слов.
(Также стоит отметить, что git stash show
сравнивает спрятанное рабочее дерево с родительским. Здесь нет git stash
Команда показать спрятанный индекс против чего-либо. Чтобы увидеть индекс против родителя, используйте git diff stash@{number}^1 stash@{number}^2
.)