Чи можна переглянути вміст сховища в git?


554

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

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

Як я можу це зробити?


1
кольоровий різний вихід: git stash show -p stash@{1} >~/.diff && vim ~/.diff(не повинно бути vimжодного текстового редактора, якщо у вашому текстовому редакторі є підтримка виділення синтаксису diff).
Тревор Бойд Сміт

Відповіді:


727

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

git stash show -p

Якщо цікавий файл, який вас цікавить, не є самим останнім, додайте ім’я скрипта в кінець команди:

git stash show -p stash@{2}

Це виглядає добре, і я бачу це в посібнику, але коли я намагаюся, це дає мені fatal: unable to create temp-file: Invalid argument- будь-яке уявлення, чому?
Benjol

29
Використовуйте git stash show -p stash@{0}для перегляду конкретного сховища. 0 показує останній тон, 1 другий останній .. і т.д. git stash listвідображатиметься всі наявні.
brita_

6
Якщо ви використовуєте PowerShell, вам доведеться ввести лапки в лапки. (Тобто: git stash show -p 'stash@{0}')
Худоба-Паско


1
Якщо ви хочете зберегти git stash show -p stash@{0}> stash.txt
різницю

87

Щоб переглянути поточний список сховища:

git stash list

Ви побачите такий список:

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

Щоб переглянути відмінності на будь-якій з цих скринь:

git stash show -p stash@{n}

34

Я фанат gitkграфічного інтерфейсу користувача, щоб візуалізувати репост git. Ви можете переглянути останній елемент, схований на:

gitk stash

Ви також можете переглянути перегляд будь-яких своїх прихованих змін (як зазначено у переліку git stash list). Наприклад:

gitk stash@{2}

На скріншоті нижче, ви можете побачити приховування як комісію у верхньому лівому куті, коли і звідки воно з’явилося в історії фіксації, список файлів, змінених внизу праворуч, а рядок за рядком відрізняється в нижньому -ліво. Весь час, поки сховище все ще витягнуте.

gitk перегляд скриньки


5
Ви можете вказати кілька stash@{X}значень у командному рядку, щоб побачити більше результатів одразу, але я не знайшов простого способу просто сказати "показати всі записи сховано" в gitk.
nobar

5
gitk stashздається, стенограма дляgitk stash@{0}
Лейф Грюнвольдт

3
щоб показати всі скрипти в gitk, які ви можете використовувати, gitk `git stash list --pretty=format:%gd`а потім шукайте "WIP on", щоб перейти до наступного сховища.
Ikar Pohorský

2
gitk --reflogдозволяє переглядати всі скриньки та багато іншого.
nobar

1
gitk був єдиним інструментом, який прямо мені показав, що в сховищі збереглися відслідковані файли. Усі інші просто показали мені "ніяких відмінностей".
Мартін Боннер підтримує Моніку

22

Щоб переглянути всі зміни в непридатному сховищі:

git stash show -p stash@{0}

Щоб переглянути зміни одного конкретного файлу в нерозкритому сховищі:

git diff HEAD stash@{0} -- path/to/filename.php

якщо хтось не пам’ятає назви файлів, він також працює для всіх файлів, змінених git diff HEAD stash @ {0}
Simeon

Тільки для ясності: -pце скорочення для --patch. Варіант походить від git-diff. Якщо ви віддаєте перевагу довгій формі, можете написати git stash show --patch.
Петерино

5

Окрім рекомендації gitk у розділі Чи можна переглянути вміст сховища в git? ви можете встановити tig і зателефонувати tig stash. Ця безкоштовна / відкрита консольна програма також дозволяє вибрати, яку скриньку для порівняння


1
Виглядає як ідеальний інструмент для керування кількома скрижалями! Ви можете також попи і падіння схованок з Pі !ключами відповідно.
Ікар Похорський

Альтернативи TUI завжди хороші, але для людей, які вже звикли або якось віддають перевагу, gitk його зламати порівняно легко, щоб показати всі прихильності .
1737973


4

Коли це питання було вперше задано, це може бути не варіантом, але, якщо ви використовуєте PyCharm, ви можете використовувати UnStash Changesінструмент (VCS-> Git-> UnStash Changes ...). Це дозволяє переглядати список прихованих змін, а також перескакувати, видаляти, очищати чи застосовувати (за бажанням нову гілку):

Видалити вікно змін

і переглядати змінені файли за копію:

Вікно, на яке впливає контур

а також різниться по файлу. У диференціалах ви можете вибирати окремі зміни, які застосовуватимуться від прихованих змін до робочої гілки (використовуючи ліворуч вказівний шеврон):

введіть тут опис зображення


3

Ви можете переглянути список усіх сташів за допомогою наступної команди:

$ 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

так, найкращий спосіб побачити те, що модифіковано, - це збереження у такому файлі:

git stash show -p stash@{0} > stash.txt

2

Спочатку ми можемо скористатися списком скриньки git, щоб отримати всі елементи сховища:

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

2

Переглянути список прихованих змін

git stash list

Для перегляду списку файлів, змінених у певному сховищі

git stash show -p stash@{0} --name-only

Для перегляду певного файлу в сховці

git show stash@{0} path/to/file

1

Показати всі стаси

Лише імена файлів:

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

Ви отримаєте кольоровий різний вихід, на який можна перейти на сторінку space ( вперед ) і b( назад ), а qтакож закрити пейджер для поточного сховища. Якщо ви хочете мати його у файлі, тоді додайте > stashes.diffдо команди.


1

Додатково до існуючих відповідей, що пропонує використовувати (щоб показати різницю від третього до останнього сховища)

git stash show -p stash@{2}

Зверніть увагу, що в git-stashдокументації написано, що

На посилання можна також згадати, вказавши лише індекс сховання (наприклад, ціле число nеквівалентно stash@{n}).

Тому це також можливо використовувати (це еквівалентно команді, наведеній вище)

git stash show -p 2

Що також повинно уникати деяких проблем Powershell .


1

Мені подобається, як gitkможна точно показати вам те, що було відхилено або що сиділо в індексі, але за замовчуванням воно покаже ті приховані "фіксації" посеред усіх ваших інших комітетів у поточній гілці.

Хитрість полягає в тому, щоб запустити gitk наступним чином:

gitk "stash@{0}^!"

(Цитування існує, щоб воно працювало в Powershell, але таким чином воно все одно має працювати і в інших оболонках.)

Якщо ви шукаєте цей синтаксис на довідковій сторінці gitrevision, ви знайдете наступне:

r1^!Позначення включає в себе зобов'язання r1 , але НЕ включає всі її батьків. Сама по собі ця позначення позначає єдиний комітет r1 .

Це, мабуть, поставить gitk в такий режим, що показуються лише безпосередні батьки вибраного комітету, що саме мені подобається.


Якщо ви хочете скористатися цим і перерахувати всі скрині, тоді ви можете запустити це:

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

(Ці одиничні лапки, що знаходяться на задніх панелях, необхідні, щоб заспокоїти Баша, інакше він скаржиться на знак оклику)

Якщо ви працюєте в Windows і використовуєте cmd або Powershell:

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

0

Наступна команда може бути використана для вилучення різної прихованої зміни, що стосується будь-якої іншої скринінгу, чи комітету, відділення чи HEAD.

git stash show
git show
git diff
git difftool

Подивимось, як ми можемо використовувати кожну з вищезгаданих команд.

  1. git stash show

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

  1. git show

Команда git-show використовується для перегляду різних типів об'єктів.

Команда git-show використовується не лише для візуалізації змін у сховках, але також використовується для перегляду одного або декількох об'єктів, таких як краплі, дерева, теги та коміти.

  1. git diff

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

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

Щоб отримати різницю між найпопулярнішим сховищем @ {0} та головним відділенням:

$ git diff stash @ {0} master

Відображати лише імена файлів, не відрізняються від змін:

$ git diff - скринька, призначена лише для імен @ {0}

Перегляньте різницю між вибраними сховищами для вибраного файлу:

$ git diff stash @ {0} ^ 1 сховище @ {0} -

  1. git difftool

Команда git-difftool також може бути використана для пошуку різниці між вибраним сховищем та вибраним комітком або гілкою або схованням

Подивіться різницю між останніми двома скрижалями:

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

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

Підсумок:

Команди, які корисні для вилучення різниці з вибраних скриптів прихованих програм, git show, git diff, git difftool.

Дивіться різницю за допомогою команди git stash show,

git stash show -p скринька @ {0}

Перегляньте зміни в сховці за допомогою команди git show,

git show stash @ {1}

Дивіться різницю між останньою скриньою та вибраною командою за допомогою команди 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.