Можно ли предварительно просмотреть содержимое тайника в git? - PullRequest
474 голосов
/ 26 августа 2010

Я часто откладываю работу на потом, потом появляются другие вещи, и через несколько недель я хочу осмотреть тайник и выяснить, какие изменения он внесет, если применить его к рабочему дереву в его текущем состоянии.

Я знаю, что могу сделать git diff для тайника, но это показывает мне все различия между рабочим деревом и тайником, тогда как мне просто интересно знать, что изменится применяемый тайник.

Как я могу это сделать?

Ответы [ 13 ]

631 голосов
/ 27 августа 2010

git stash show покажет вам файлы, которые изменились в вашем последнем тайнике. Вы можете добавить опцию -p, чтобы показать разницу.

git stash show -p

Если интересующий вас тайник не самый последний, добавьте его имя в конец команды:

git stash show -p stash@{2}
82 голосов
/ 11 июня 2013

Для просмотра текущего списка тайников:

git stash list

Вы увидите такой список:

stash@{0}: WIP on ...
stash@{1}: ...
stash@{2}: ...
...

Чтобы просмотреть diff на любом из этих тайников:

git stash show -p stash@{n}
32 голосов
/ 27 мая 2014

Я фанат графического интерфейса gitk для визуализации git-репозиториев.Вы можете просмотреть последний сохраненный элемент с помощью:

gitk stash

Вы также можете использовать просмотр любых сохраненных изменений (как указано git stash list).Например:

gitk stash@{2}

На скриншоте ниже вы можете увидеть тайник как коммит в верхнем левом углу, когда и откуда он появился в истории коммитов, список файлов, измененных в правом нижнем углуи построчно diff в левом нижнем углу.Все, пока тайник все еще спрятан.

gitk viewing a stash

21 голосов
/ 29 октября 2015

Чтобы просмотреть все изменения в неиспользованном тайнике:

git stash show -p stash@{0}

Чтобы просмотреть изменения одного конкретного файла в неиспользованном тайнике:

git diff HEAD stash@{0} -- path/to/filename.php
5 голосов
/ 03 сентября 2015

Помимо рекомендации gitk в Можно ли предварительно просмотреть содержимое тайника в git? вы можете установить tig и вызвать tig stash. Эта бесплатная / открытая консоль программа также позволяет вам выбрать, какой тайник сравнивать

3 голосов
/ 08 марта 2017

Вы можете просмотреть список всех тайников с помощью следующей команды:

$ git stash list

stash@{0}: WIP on dev: ddd4d75 spelling fix

stash@{1}: WIP on dev: 40e65a8 setting width for messages

......

......

......


stash@{12}: WIP on dev: 264fdab added token based auth

Самый новый тайник - первый.

Вы можете просто выбрать индекс n тайника, предоставленного в приведенном выше списке, и использовать следующую команду для просмотра скрытой информации

git stash show -p stash@{3}

Аналогично,

git stash show -p stash@{n}

Вы также можете проверить diff, используя команду:

git diff HEAD stash@{n} -- /path/to/file
3 голосов
/ 30 апреля 2015

Я использую это, чтобы увидеть все мои тайники с подсветкой различий в цветах (в Fedora 21):

git stash list | 
  awk -F: '{ print "\n\n\n\n"; print $0; print "\n\n"; 
  system("git -c color.ui=always stash show -p " $1); }' | 
  less -R

(адаптировано из Git: посмотреть, что в тайнике без применения тайника )

2 голосов
/ 15 июня 2018

Когда этот вопрос был задан впервые, это, возможно, не вариант, но, если вы используете PyCharm, вы можете использовать инструмент UnStash Changes (VCS-> Git-> UnStash Changes ...). Это позволяет просматривать список сохраненных изменений, а также вставлять, удалять, очищать или применять (в новой ветви, если необходимо):

Unstash Changes Window

и просмотр измененных файлов на каждый тайник:

Paths Affected Window

, а также различия в файлах. В diff-файлах вы можете выбрать отдельные изменения, чтобы применить их из сохраненных изменений к рабочей ветви (используя шеврон, указывающий влево):

enter image description here

2 голосов
/ 10 июня 2018

да, лучший способ увидеть, что модифицируется, - это сохранить в файл так:

git stash show -p stash@{0} > stash.txt
2 голосов
/ 04 июля 2016

Сначала мы можем использовать список git stash для получения всех элементов stash:

$git stash list
stash@{0}: WIP on ...
stash@{1}: WIP on ....
stash@{2}: WIP on ...

Затем мы можем использовать git stash show stash@{N} для проверки файлов в определенном хранилище N.Если мы его запустим, то получим:

$ git stash show stash@{2}
fatal: ambiguous argument 'stash@2': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Причиной этого может быть то, что оболочка съедает фигурные скобки и git видит stash@2, а не stash@{2}.И чтобы это исправить, нам нужно использовать одинарные кавычки для фигурных скобок:

git stash show stash@'{2'}
com/java/myproject/my-xml-impl.xml                     | 16 ++++++++--------
com/java/myproject/MyJavaClass.java                    | 16 ++++++++--------
etc.
...