Как вернуть неустановленные изменения в файлы определенного типа в git

У меня есть куча модифицированных файлов в моем репозитории git, и большое количество из них - файлы xml. Как вернуть изменения (reset изменения) только xml файлов?

Ответы

Ответ 1

Спасибо всем за ваши ответы, но я нашел для меня наиболее точное решение:

git diff --name-only -- '*.xml' | sed 's, ,\\&,g' | xargs git checkout --

sed - пользователь, чтобы избежать пробелов, которые беспокоили xargs, и все работает очень быстро и точно.

Ответ 2

Вам не нужны find или sed, вы можете использовать подстановочные знаки, поскольку git понимает их (не зависит от вашей оболочки):

git checkout -- "*.xml"

Кавычки не позволят вашей оболочке развернуть команду только файлам в текущем каталоге до ее выполнения.

Вы также можете отключить расширение оболочки оболочки (с помощью bash):

set -f
git checkout -- *.xml

Это, конечно же, безошибочно стирает ваши изменения!

Ответ 3

find . -name '*.xml' -print0 | xargs -0 git checkout HEAD

или что-то подобное, если ваша система не имеет find и xargs. Или просто git checkout HEAD **/*.xml в zsh или любой другой оболочке с этой формой рекурсивного глобирования.