Sta sh на самом деле является коммитом слияния, а git show
скроет блок сравнения, который выглядит как принятое изменение слияния.
Вы можете использовать опцию -m
:
git show -m stash@{0}
или явно запросите diff между stash@{0}
и его первым родителем (ваш последний активный коммит):
git diff stash@{0}^ stash@{0}
Подробнее
1. stash
на самом деле является коммитом слияния
git stash
фактически создает два коммита:
- первый сохраняет содержимое индекса, когда вы ставите sh
- второй хранит содержимое рабочего дерева, которое вы ставите sh
Вы можете посмотреть историю stash@{0}
:
$ git log --graph --oneline stash@{0}
* afffe0c (refs/stash) WIP on master: 6615405 commit: created file "a.txt"
|\
| * 6ebdc03 index on master: 6615405 commit: created file "a.txt"
|/
* 6615405 (HEAD -> master) commit: created file "a.txt"
* 170d9f8 empty
2. Различия между git stash show
и git show
git stash show -p
знают, что вы обычно хотите просмотреть разницу между stash@{0}
и вашей работой (ее первым родителем);
git show stash@{0}
, с другой стороны, отображает этот коммит как коммит слияния.
Если изменения были поставлены при сохранении, тогда эти модификации будут частью коммита index on xxx : ...
, а git show
не будет, по умолчанию отображать этот блок различий.
См. git help show
:
Для коммитов показывает сообщение журнала и текстовый дифференциал. Он также представляет коммит слияния в специальном формате, который создается git diff-tree - cc.
и git help diff-tree
, * Опция 1059 *:
--cc
Этот флаг изменяет способ отображения исправления фиксации слияния аналогично опции - c. Он подразумевает опции - c и -p и дополнительно сжимает выходные данные патча, пропуская неинтересные фрагменты, чье содержимое в родительских элементах имеет только два варианта, и в результате объединения выбирается один из них без изменений. Когда все фрагменты неинтересны, сам коммит и сообщение журнала коммитов не отображаются, как в любом другом случае «пустого различий».