git show
(или git log -p
, который делает что-то чрезвычайно похожее, но работает более чем с одним коммитом) diff коммит против его родителя (ей). Добавление --name-only
уменьшает вывод diff, чтобы показывать только измененные имена файлов, а не измененные имена файлов плюс набор инструкций.
То, что вы, вероятно, хотите здесь, это использовать git ls-tree
, который показывает имена файлов, содержащихся в коммите. Если вы не на верхнем уровне хранилища, git ls-tree
по умолчанию показывает только вещи в текущем каталоге, поэтому вы, вероятно, захотите добавить -r --full-tree
. Затем вы хотите найти вещи, которые содержат или заканчиваются выбранным вами именем:
git ls-tree -r --full-tree cb85815bc1 | grep GuiCommonElements.java
Это немного ошибочно, так как grep
сам принимает аргументы регулярного выражения и показывает совпадающие строки, поэтому он не только отображает файлы вроде:
lib/old/GuiCommonElements.java
lib/new/GuiCommonElements.java
но также:
other/ThisIsNotGuiCommonElements.java
(потому что содержит GuiCommonElements.java
) и:
other/GuiCommonElementsXJava
(поскольку .
соответствует одному из символов, включая X
). Но это, вероятно, достаточно хорошо, и, если хотите, можете немного укрепить его.
Документация git ls-tree
утверждает, что она принимает <path>...
аргументы, которые являются "шаблонами для сопоставления", но шаблоны глобусов, похоже, здесь не работают: если бы сработали глобусы, '**/GuiCommonElements.java'
сработает , но в моем тесте только сейчас они не сделали.