Відповіді:
Перегляньте останню скриньку:
git stash show -p
Дивіться довільну скриньку:
git stash show -p stash@{1}
Від git stash
посібників:
За замовчуванням команда показує diffstat, але вона прийме будь-який формат, відомий git diff (наприклад, git stash show -p stash @ {1} для перегляду другої останньої скриньки у формі виправлення).
stash@{0}
є типовим; Вам потрібен аргумент, лише якщо ви хочете подивитися на попередні статки.
{0}
.
-p
підставка?
Щоб переглянути останню скриньку:
git stash show -p
Щоб побачити довільну скриньку:
git stash show -p stash@{1}
Також я використовую git diff для порівняння скриньки з будь-якою гілкою.
Ви можете використовувати:
git diff stash@{0} master
Щоб побачити всі зміни порівняно з ведучим відділення.
Або ви можете використовувати:
git diff --name-only stash@{0} master
Щоб легко знайти лише змінені імена файлів.
git diff stash@{0} master
, ви отримаєте різницю вашої скрині в порівнянні з поточним майстром (що включає роботу, виконану на master після сховища) було зроблено), а не файли / рядки, про які буде змінено скрипт, про що йдеться.
git difftool --tool=... stash@{0} HEAD
git diff stash@{0}^ stash@{0}
git diff stash@{0} master -- filename
щоб отримати зміни до певного файлу.
Якщо гілка, на якій базуються приховані зміни, тим часом змінилася, ця команда може бути корисною:
git diff stash@{0}^!
Це порівнює приховування та зобов'язання, на яких ґрунтується.
~/.gitconfig
:laststash = diff stash@{0}^!
git difftool stash^!
для відмінності останнього тайму від фіксації він базувався, git difftool stash HEAD
для відмінності останнього тайму від поточного
Якщо ваше робоче дерево забруднене , ви можете порівняти його зі сховищем, спочатку скопивши брудне робоче дерево, а потім порівнявши його зі сховищем. Згодом ви можете скасувати комісію з брудним робочим деревом (оскільки ви, можливо, не захочете мати це брудне виконання у своєму журналі реєстрації).
Ви також можете скористатися наступним підходом, щоб порівняти два сташі один з одним (у такому випадку спочатку просто викладіть одну із скринь).
Введіть ваше брудне робоче дерево:
git add .
git commit -m "Dirty commit"
Відмінніть скриньку від цього коміту:
git diff HEAD stash@{0}
Потім ви можете скасувати команду і повернути її в робочий режим:
git reset --soft HEAD~1
git reset .
Тепер ви розрізнили брудне робоче дерево зі сховищем та повертаєтесь туди, де ви були спочатку.
git stash show -l
. Чи відрізняється вона від останньої скриньки від робочої (брудної) копії? Як ви користуєтесь ним, не отримуючи error: switch l requires a value
?
git stash show -l
. Що стосується того, чому це не працює для вас, я можу лише здогадуватися, що ви могли бути на старій версії git? Я на git v2.20.1, і він працює бездоганно без помилок.
@ Магна відповідь є єдиним (дуже пізно) датою, відповіді найбільш гнучкою / корисної інтерпретація питання, але справедливе трохи складнішим , ніж це необхідно. Замість того, щоб робити та скидати, просто сховіть свою робочу копію, порівняйте та видаліть.
git stash save "temp"
git diff stash@{0} stash@{1}
git stash pop
Це показує вам відмінності між вершиною стека та вашою робочою папкою, тимчасово перетворюючи зміни робочої папки у верхню частину стека (stash @ {0}), переміщуючи початковий верхній вниз (stash @ {1} ), а потім порівнюючи використання вихідного верху в позиції "новий набір", щоб ви побачили зміни, які були б наслідком застосування його поверх вашої поточної роботи.
"Але що робити, якщо я не маю поточної роботи?" Тоді ви у звичайному нудному випадку. Просто використовуйте відповідь @ Amber
git stash show
або відповідь @ czerasz
git diff stash@{0}
або визнати, що прибирання та зняття волосся швидко і легко, просто зніміть зміни та огляньте їх. Якщо ви не хочете, щоб їх наразі викидайте (поточний індекс / робоча папка змінюється). Повністю це
git stash apply
git diff
git reset
git checkout
git stash save -u
Це працює для мене на версії 1.8.5.2 git:
git diff stash HEAD
git stash apply
.
Якщо у вас є інструменти для розходження (наприклад, поза порівнянням)
git difftool stash HEAD
git stash apply
.
HEAD
. Я міг би змінити відповідь @ yerlilbilgin для видалення HEAD, але я думаю, що кожен, хто використовує git, може зрозуміти цю частину, і я подовжуючи відповідь зробить її менш зрозумілою. Ніхто не звинувачує @yerlibilgin.
Один із способів зробити це, не рухаючи нічого, - скористатися тим, що patch
може читати git diff (уніфікована різниця)
git stash show -p | patch -p1 --verbose --dry-run
Це покаже вам покроковий попередній перегляд того, який патч зазвичай робиться. Додатковою перевагою для цього є те, що патч не заважатиме собі записати патч на робоче дерево, якщо з якихось причин вам просто потрібен git, щоб закрити інформацію про заздалегідь зміну, продовжуйте та видаляйте --dry- запустіть і дотримуйтесь багатослівних інструкцій.
Поєднуючи те, що я дізнався у цій темі та в цій , коли я хочу побачити "що всередині скриньки", я спочатку запускаю:
git stash show stash@{0}
Це покаже, які файли були змінені. Потім, щоб отримати гарну візуальну різницю в difftool, я роблю:
git difftool --dir-diff stash@{0} stash@{0}^
Це відобразить всі відмінності одразу даного скриньку щодо його батьків.
Ви можете налаштувати інструмент diff у ~/.gitconfig
, наприклад, за допомогою Meld :
...
[diff]
tool = meld
FWIW Це може бути трохи зайвим для всіх інших відповідей і дуже схоже на прийняту відповідь, яка знаходиться на місці; але, можливо, це комусь допоможе.
git stash show --help
дасть тобі все, що тобі потрібно; включаючи інформацію про приховування шоу.
показати [<сташ>]
Показати зміни, записані в сховці даних, як відмінності між прихованим станом та його початковим батьківським. Коли не вказано, показується найновіший. За замовчуванням команда показує diffstat, але вона прийме будь-який формат, відомий git diff (наприклад, git stash show -p stash @ {1} для перегляду другої останньої скриньки у формі виправлення). Ви можете використовувати конфігураційні змінні stash.showStat та / або stash.showPatch для зміни поведінки за замовчуванням.
Вона списку схованок
git stash list
stash@{0}: WIP on feature/blabla: 830335224fa Name Commit
stash@{1}: WIP on feature/blabla2: 830335224fa Name Commit 2
Тож отримайте номер скриньки і зробіть:
Ви можете зробити:
git stash show -p stash@{1}
Але якщо ви хочете, щоб різниця (це інакше, щоб показати скриньку, тому я пишу цю відповідь. Diff
Розгляньте поточний код у вашій галузі та show
просто покажіть, що ви будете застосовувати )
Ви можете використовувати:
git diff stash@{0}
або
git diff stash@{0} <branch name>
Ще одна цікава річ:
git stash apply
git stash apply stash@{10}
Це стосується прихованої скриньки, не видаляючи її зі списку, ви можете git checkout .
видалити ці зміни або якщо ви радіgit stash drop stash@{10}
вийняти приховування зі списку.
Звідси я ніколи не рекомендую використовувати git stash pop
та використовувати комбінацію git stash apply
та git stash drop
Якщо ви застосуєте приховану скриньку в неправильній гілці ... ну іноді важко відновити код.
Залежно від того, з чим ви хочете порівняти скриньку (локальне робоче дерево / батьківська комісія / головна фіксація), насправді є кілька команд, серед яких старі добрі git diff
та більш конкретні git stash show
:
╔══════════════════════╦═══════════════════════════════╦═══════════════════╗
║ Compare stash with ↓ ║ git diff ║ git stash show ║
╠══════════════════════╬═══════════════════════════════╬═══════════════════╣
║ Local working tree ║ git diff stash@{0} ║ git stash show -l ║
║----------------------║-------------------------------║-------------------║
║ Parent commit ║ git diff stash@{0}^ stash@{0} ║ git stash show -p ║
║----------------------║-------------------------------║-------------------║
║ HEAD commit ║ git diff stash@{0} HEAD ║ / ║
╚══════════════════════╩═══════════════════════════════╩═══════════════════╝
Незважаючи git stash show
на те, що з першого погляду виглядає більш зручним для користувача, git diff
він насправді є більш потужним, оскільки дозволяє вказувати назви файлів для більш цілеспрямованого розгляду. Я особисто створив псевдоніми для всіх цих команд у своєму плагіні zsh git .