Git: фиксация только указанных файлов (переименованных, удаленных, измененных, новых файлов и т. Д. c) - PullRequest
1 голос
/ 22 марта 2020

У меня есть старый проект, в котором я изменил много файлов (более ста). Удалил несколько, переименовал целую кучу, удалил много, эт c. В этой партии изменений, вероятно, стоит 10 или более коммитов. Как мне написать команду фиксации, чтобы выбрать, например, только те переименованные файлы:

git commit "all renamed files" -m "Renamed files."

Я хотел бы попытаться избежать чего-то подобного:

git commit file1 file2 file3 -m "Renamed files."

... потому что их слишком много. Я также могу зафиксировать папки стоимостью (git commit folder1 . . .), но, к сожалению, в папках есть файлы, которые не нужно фиксировать.

Я принял предоставленный ответ, но мне пришлось изменить команду бит:

git status --porcelain | grep -E '^(.R|R.)' | \
cut -b4- | awk '{print $1}' | xargs git commit -m "Bulk renamed files."

Причина этого заключается в том, что, например, при запуске git status --porcelain | grep -E '^(.R|R.)' | cut -b4- выводятся (для демонстрации всего одна строка): source/__init__.py -> site/__init__.py. Когда я использую xargs для запуска команды commit, она не принимается, предположительно из-за части -> . . .. Поэтому я использую awk здесь, чтобы выбрать только первый блок, и это прекрасно работает. Спасибо!

1 Ответ

5 голосов
/ 22 марта 2020

Вы можете использовать git status --porcelain для выбора только файлов определенного типа. Например, чтобы выбрать только переименованные файлы, используйте что-то вроде следующего:

$ git status --porcelain | grep -E '^(.R|R.)' | cut -b4- | \
  xargs git commit -m 'Renamed files'

Выводимые буквы и их значения можно увидеть, выполнив git status --help.

...