Ответ 1
Спасибо за ваши ответы @mvp, @xero, я получаю то, что хочу получить на оба ваших ответа.
git log --name-only
или
git log --name-only --oneline
для краткости.
Можно ли показать измененное имя файла только с git log
?
Спасибо за ваши ответы @mvp, @xero, я получаю то, что хочу получить на оба ваших ответа.
git log --name-only
или
git log --name-only --oneline
для краткости.
Я предполагаю, что вы можете использовать флаг --name-only
. что-то вроде:
git log 73167b96 --pretty="format:" --name-only
i лично использую git show
для просмотра файлов, измененных в фиксации
git show --pretty="format:" --name-only 73167b96
(73167b96 может быть любым именем фиксации/тега)
Это дает почти то, что вам нужно:
git log --stat --oneline
Идентификатор фиксации + короткая одна строка все еще остается, а затем список измененных файлов с помощью этой фиксации.
Я наткнулся на поиск подобного ответа без ограничения "git log". Ответы здесь не дали мне то, что мне нужно, но это сделало так, я добавлю его, если другие считают это полезным:
git diff --name-only
Вы также можете связать это со стандартными указателями фиксации, чтобы увидеть, что изменилось с момента конкретной фиксации:
git diff --name-only HEAD~3
git diff --name-only develop
git diff --name-only 5890e37..ebbf4c0
Это лаконично предоставляет имена файлов, которые отлично подходят для сценариев. Например:
git diff --name-only develop | while read changed_file; do echo "This changed from the develop version: $changed_file"; done
#OR
git diff --name-only develop | xargs tar cvf changes.tar
Теперь я использую следующее, чтобы получить список измененных файлов, которые имеет моя текущая ветвь, сравнивая их с master (с легкостью меняются переменные):
git log --oneline --pretty="format:" --name-only master.. | awk 'NF' | sort -u
Раньше я полагался на это:
git log --name-status <branch>..<branch> | grep -E '^[A-Z]\b' | sort -k 2,2 -u
который выводит только список файлов и их состояние (добавлено, изменено, удалено):
A foo/bar/xyz/foo.txt
M foo/bor/bar.txt
...
Параметр -k2,2
для сортировки делает его сортировкой по пути к файлу вместо типа изменения (A, M, D,).
Если вам нужны имена просто, например:
dir/subdir/file1.txt
dir/subdir2/file2.sql
dir2/subdir3/file6.php
(который я использую в качестве источника для команды tar), вам также потребуется отфильтровать сообщения о фиксации.
Для этого я использую следующую команду:
git log --name-only --oneline | grep -v '.{7} '
Команда Grep исключает (-v
param) каждую строку, которая начинается с семи символов (это длина моего хэша git для git log
), за которым следует пробел. Поэтому он отфильтровывает каждую строку git hash message
и оставляет только строки с именами файлов.
Одним из полезных улучшений является добавление uniq
для удаления повторяющихся строк, чтобы он выглядел следующим образом:
git log --name-only --oneline | grep -v '.{7} ' | uniq