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.)

Другие вопросы по тегам