Можно ли просмотреть содержимое прошивки в git?

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

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

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

Ответ 1

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

git stash show -p

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

git stash show -p [email protected]{2}

Ответ 2

Чтобы просмотреть текущий список тайников:

git stash list

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

[email protected]{0}: WIP on ...
[email protected]{1}: ...
[email protected]{2}: ...
...

Для просмотра различий на любом из этих тайников:

git stash show -p [email protected]{n}

Ответ 3

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

gitk stash

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

gitk [email protected]{2}

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

gitk viewing a stash

Ответ 4

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

git stash show -p [email protected]{0}

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

git diff HEAD [email protected]{0} -- path/to/filename.php

Ответ 5

Просто применив stash с помощью git stash apply? Это не удаляет stash, поэтому вы можете reset работать дерево без потери спрятанной работы, если вам не нравятся изменения. И если вам они нравятся, вы можете просто удалить трюк с помощью git stash drop.

Ответ 8

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

$ git stash list

[email protected]{0}: WIP on dev: ddd4d75 spelling fix

[email protected]{1}: WIP on dev: 40e65a8 setting width for messages

......

......

......


[email protected]{12}: WIP on dev: 264fdab added token based auth

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

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

git stash show -p [email protected]{3}

Аналогично,

git stash show -p [email protected]{n}

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

git diff HEAD [email protected]{n} -- /path/to/file

Ответ 9

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

$git stash list
[email protected]{0}: WIP on ...
[email protected]{1}: WIP on ....
[email protected]{2}: WIP on ...

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

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

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

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

Ответ 10

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

git stash show -p [email protected]{0} > stash.txt

Ответ 11

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

Unstash Changes Window

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

Paths Affected Window

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

enter image description here

Ответ 12

Показать все штампы

Только имена файлов:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show $i; done

Полное содержимое файла во всех файлах:

for i in $(git stash list --format="%gd") ; do echo "======$i======"; git stash show -p $i; done

Вы получите цветной diff-вывод, который вы можете разместить с помощью space (вперед) и b (назад) и q, чтобы закрыть пейджер для текущего тайника. Если вы предпочитаете его в файле, добавьте > stashes.diff в команду.

Ответ 13

Просмотр списка сохраненных изменений

git stash list

Для просмотра списка файлов, измененных в конкретном тайнике

git stash show -p [email protected]{0} --name-only

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

git show [email protected]{0} path/to/file

Ответ 14

В дополнение к существующим ответам, которые предлагают использовать (чтобы показать разницу от третьего до последнего тайника)

git stash show -p [email protected]{2}

Обратите внимание, что в документации git-stash написано, что

На stashes также можно ссылаться, указав только индекс stash (например, целое число n эквивалентно [email protected]{n}).

Поэтому его также можно использовать (это эквивалентно команде выше)

git stash show -p 2

Что также должно избежать некоторых проблем с Powershell.

Ответ 15

Мне нравится, как gitk может показать вам, что именно не было отслежено или находится в индексе, но по умолчанию он будет отображать эти "коммиты" stashа в середине всех других ваших коммитов в текущей ветки.

Хитрость в том, чтобы запустить gitk следующим образом:

gitk "[email protected]{0}^!"

(Цитата приведена для того, чтобы заставить его работать в Powershell, но таким образом он должен работать и в других оболочках.)

Если вы посмотрите этот синтаксис на странице справки gitrevisions, вы найдете следующее:

Запись r1^! включает коммит r1, но исключает всех его родителей. Само по себе это обозначение обозначает единственный коммит r1.

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


Если вы хотите пойти дальше и перечислить все stashи, вы можете запустить это:

gitk 'git stash list '--pretty=format:%gd^!''

(Эти одинарные кавычки внутри обратных кавычек необходимы для успокоения Bash, в противном случае он жалуется на восклицательный знак)

Если вы используете Windows и используете cmd или Powershell:

gitk "--argscmd=git stash list --pretty=format:%gd^!"

Ответ 16

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

git stash show
git show
git diff
git difftool

Давайте посмотрим, как мы можем использовать каждую из вышеупомянутых команд.

  1. git stash show

Простая команда git stash show дает очень краткое резюме изменений файла, но не будет отображать разницу изменений с текущим заголовком.

  1. мерзавец

Команда git-show используется для просмотра объектов различных типов.

Команда git-show используется не только для визуализации изменений в stashе, но и для также используется, чтобы увидеть один или несколько объектов, таких как капли, деревья, теги и совершает.

  1. git diff

Команда git-diff также является одной из общих команд, которая используется для показать изменения между коммитами, коммитом и рабочим деревом и т.д.

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

Чтобы получить разницу между самым верхним stashом @{0} и главной веткой:

$ git diff stash @{0} master

Отображать только имена файлов без изменений:

$ git diff - только для имени stash @{0} master

Смотрите разницу между выбранными stashами для выбранного файла:

$ git diff stash @{0} ^ 1 stash @{0} -

  1. мерзавец difftool

Команда git-difftool также может использоваться для поиска различий между выбранный stash и выбранный коммит или ветвь или stash

Посмотрите разницу между последними двумя stashами:

$ git difftool stash @{0} stash @{0} ^ 1

git difftool --dir-diff stash @{0} stash @{0} ^ 1

Резюме:

Команды, которые полезны для извлечения diff из выбранного stash git stash show, git show, git diff, git difftool.

Посмотрите разницу, используя команду git stash show,

git stash show -p stash @{0}

Смотрите изменения в stashе с помощью команды git show,

git show stash @{1}

Посмотрите разницу между последним stashом и выбранным коммитом с помощью команды git diff,

git diff stash @{0}

Рекомендации:

https://howto.lintel.in/how-to-see-stashed-changes-using-git-stash/

https://git-scm.com/docs/git-show

https://git-scm.com/docs/git-stash