Якщо я запускаю git stash -u
, я можу зберігати непотрібні файли. Однак згадані відслідковувані файли взагалі не відображаються git stash show stash@{0}
. Чи є спосіб відобразити незатребувані сховані файли без застосування скрипту?
Якщо я запускаю git stash -u
, я можу зберігати непотрібні файли. Однак згадані відслідковувані файли взагалі не відображаються git stash show stash@{0}
. Чи є спосіб відобразити незатребувані сховані файли без застосування скрипту?
Відповіді:
Файли, що не відслідковуються, зберігаються в третьому батьківському скрині. (Це насправді не задокументовано, але досить очевидно з комітету , який запровадив функцію -u, 787513 ... , а також решту документації дляgit-stash
речей фрази ... або просто виконуючи git log --graph stash@{0}
)
Ви можете переглянути лише "не відстежувану" частину скриньки за допомогою:
git show stash@{0}^3
або, просто "незавершене" дерево, через:
git show stash@{0}^3:
або, певний "необроблений" файл у дереві, через:
git show stash@{0}^3:<path/to/file>
На жаль, не існує хорошого способу отримати підсумок відмінностей між усіма поетапними + нестандартними + без нагляду та "поточним" станом. тобто: git show stash@{0}
не може бути включено файли, що не відслідковуються. Це пов’язано stash@{0}:
з тим, що дерев`яний об'єкт прихованої скриньки , який називається , не включає жодних змін з боку третього, "нестандартного" батька.
Це пов’язано із способом повторного застосування стасів: відстежені файли можна легко застосувати як виправлення, тоді як відслідковувані файли теоретично можна застосовувати лише як «цілі файли».
git log --graph --topo-order -m -u
. matthewlmcclure.com/s/2014/01/10/…
fatal: ambiguous argument 'stash@{0}^3': unknown revision or path not in the working tree.
) , якщо ви НЕ на насправді мають неотслежіваемих файли в цьому кублі (але думав , що ти зробив).
git stash show
нічого НЕ показують неотслежіваемих файли (справжні , по крайней мере , мерзотник 2.7.4):
git stash pop
спочатку спробує відновити відслідковувані файли, потім спробу відновити відслідковані файли. Якщо остання операція не вдасться (наприклад, конфлікт), перша операція не буде відкатаною (файл без збережених файлів залишатиметься таким, як є, але файли не видаляються з диска), тож навіть якщо ви виправите конфлікт, наступне спливаюче вікно не вдасться все одно.
Ви можете перерахувати всі приховані комісії за допомогою наступної команди:
git rev-list -g stash
Оскільки stass представлені у вигляді 3-х напрямних об'єднань файлів HEAD, індексу та без батьківських "root" фіксованих файлів, що не відслідковуються, нераціональні сховища файлів можуть бути перераховані, переносячи вищенаведений вихід у наступне:
git rev-list -g stash | git rev-list --stdin --max-parents=0
Корисні програми вищезазначеного:
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git show --stat
Звичайно, видаліть, --stat
щоб побачити вміст файлів.
git rev-list -g stash | xargs -n1 git ls-tree -r | sort -u | grep <pattern>
git rev-list -g stash | git rev-list --stdin --max-parents=0 | xargs git grep <pattern>
git rev-list -g stash | git rev-list --stdin | xargs git show --stat
Щоб перелічити непотрібні файли у сховці:
git ls-tree -r stash@{0}^3 --name-only
Щоб показати повну різницю всіх неподілених файлів (із вмістом):
git show stash@{0}^3
Ці команди читають останню (останню) сховку. Для попередніх стасів збільшуйте число за "скринькою @", наприклад, stash@{2}
на другу від останньої скриньки.
Причина цього працює в тому, що git stash
створюється комісія злиття для кожного сховища, на яку можна посилатися як stash@{0}
і stash@{1}
т. Д. Перший батьків цього комітету - HEAD на момент сховища, другий з батьків містить зміни в відстежуваних файлах, а по-третє (які можуть не існувати) зміни у відслідковуваних файлах.
Частково це пояснено на сторінці сторінки в розділі "Обговорення" .
Щоб побачити всі файли в сховці (як відстежені, так і не відстежені), я додав цей псевдонім у свій конфігурацію:
showstash = "!if test -z $1; then set -- 0; fi; git show --stat stash@{$1} && git show --stat stash@{$1}^3 2>/dev/null || echo No untracked files -"
Для цього потрібен єдиний аргумент, яку скриньку ви хочете переглянути. Зверніть увагу, він все ще буде представлений у двох списках спина спини.
if...fi
Розділ змінює Баш міркування $ 1 в 0 , якщо жоден з них не був прийнятий.
Вирішення завдань: Постановка файлів перед тим, як зберігати їх, git stash show -p
спрацює як очікується.
git add .
git stash save
Примітка. Цей спосіб дає також можливість додавання інтерактивних частин живлення, ось як .
Обережно: переконайтеся, що у вас не було попередньо поставленої роботи, або ви не зможете її розрізнити.
Це може бути корисним.
git stash show
З'являється, що показує різницю між робочою копією та №1 (відповідний код від git-stash.sh:,git diff ${FLAGS:---stat} $b_commit $w_commit
у якому $ b_commit - це №1, а $ w_commit - це прихований фіксатор); чи є якийсь вбудований спосіб дляgit stash show
включення №3?