Если я запустил git stash -u
, я могу заархивировать ненужные файлы. Однако указанные неиспользуемые файлы вообще не отображаются с помощью git stash show [email protected]{0}
. Есть ли способ показать неотправленные скрытые файлы без применения кошелька?
В git есть ли способ показать незакрепленные скрытые файлы без применения кошелька?
Ответ 1
Неотслеживаемые файлы хранятся в третьем родителе фиксации закладок. (Это фактически не документировано, но довольно очевидно из Конец, который ввел функцию -u, 787513... и способ остальная часть документации для git-stash
фразы вещи... или просто делая git log --graph [email protected]{0}
)
Вы можете просмотреть только "невоспроверенную" часть тайника с помощью:
git show [email protected]{0}^3
или, просто "не проверенное" дерево, через:
git show [email protected]{0}^3:
или, в частности, "untracked" файл в дереве:
git show [email protected]{0}^3:<path/to/file>
Существует, к сожалению, нет хорошего способа получить сводку различий между всеми поставленными + неустановленными + необработанными и "текущими" состояниями. т.е.: git show [email protected]{0}
не может быть включено, чтобы включить файлы без следа. Это связано с тем, что объект дерева кошелька, который называется [email protected]{0}:
, не содержит никаких изменений от третьего, "неустановленного" родителя.
Это происходит из-за повторного применения stashes: отслеженные файлы могут быть легко применены в качестве патчей, тогда как не проверенные файлы могут применяться теоретически как "целые файлы".
Ответ 2
Вы можете перечислить все кошмары с помощью следующей команды:
git rev-list -g stash
Так как stashes представляются как 3-стороннее объединение слиянием HEAD, индекса и без корневого "корневого" фиксации невоспроизводимых файлов, могут быть перечислены незафиксированные стопки файлов, проложив вышеприведенный вывод следующим образом:
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>
Невосстановленные файлы Grep
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
Ответ 3
Чтобы увидеть все файлы в кошельке (как отслеживаемые, так и не проверенные), я добавил этот псевдоним в свою конфигурацию:
showstash = "!if test -z $1; then set -- 0; fi; git show --stat [email protected]{$1} && git show --stat [email protected]{$1}^3 2>/dev/null || echo No untracked files -"
Требуется один argument, из которого вы хотите просмотреть. Обратите внимание, что он все равно отобразит его в двух списках "спина к спине".
Раздел if...fi
изменяет аргумент bash от $1 до 0, если ни один не был передан.
Ответ 4
Чтобы перечислить неиспользуемые файлы в тире:
git ls-tree -r [email protected]{0}^3 --name-only
Чтобы показать полный разброс всех файлов без треков (с контентом):
git show [email protected]{0}^3
Эти команды считывают последний (последний) тайник. Для более ранних задержек увеличьте число за "stash @", например [email protected]{2}
для второго из последнего тайника.
Причина этого в том, что git stash
создает фиксацию слияния для каждого тайника, на который можно ссылаться как [email protected]{0}
, [email protected]{1}
и т.д. Первым родителем этого коммита является HEAD во время таймаута, второй родитель содержит изменения в отслеживаемых файлах, а третий (который может не существовать) - изменения в файлах без следа.
Это частично объясняется в manpage в разделе "Обсуждение" .
Ответ 5
Обходной путь: ставить файлы перед тем, как их скопировать, сделает git stash show -p
работать как ожидалось.
git add .
git stash save
Примечание: Этот способ дает возможность добавлять дополнительные части, вот как.
Предостережение: Убедитесь, что у вас нет ранее поставленной работы, или вы не сможете ее отличить.
Это может быть полезно.