Git обвиняет удаленный файл, автоматически
Это общий вопрос, как бежать git blame
на файл, который был ранее удален (с git rm
). Если вы просто запустите его со старым именем файла, оно выдаст ту же ошибку, что и для файла, который никогда не существовал:
% git init
% echo 1 >a
% git add a
% git commit -m.
% echo 2 >a
% git add a
% git commit -m.
% git rm a
% git commit -m.
% git blame a
fatal: cannot stat path 'a': No such file or directory
% git blame z
fatal: cannot stat path 'z': No such file or directory
(Ответы, напечатанные git на более ранние команды, были опущены для краткости.)
Распространенным решением является посмотреть на git log --stat
найти ревизию, в которой был удален файл. Затем вы можете передать родителя этой ревизии git blame
:
% git blame 11144~1 -- a
97da6499 (Ed Avis 2016-01-14 11:00:40 +0000 1) 2
Это работает, но это неудобно для ручного поиска по журналу, как это. Нет ли способа сказать git 'Я хочу посмотреть, какие файлы раньше вызывались a
в любой прошлой ревизии? Я надеюсь на что-то простое, как
% git blame --any-file-named a
который автоматически проверил бы всю историю хранилища на наличие файлов с таким именем.
2 ответа
Вы всегда можете сделать свою собственную функцию bash для этого:
blame-deleted () {
git blame $(git rev-list -n 1 HEAD -- $1)~1 -- $1
}
Добавление этого в ваш.bashrc поможет вам:
% blame-deleted a
Вы можете получить последнюю версию, в которой был файл с git log
:
git log --pretty=%H --diff-filter=AM -1 -- path
а также git blame
следует ли за изменениями вокруг:
Происхождение строк автоматически отслеживается при переименовании всего файла (в настоящее время нет возможности отключить последующее переименование). Чтобы следить за линиями, перемещенными из одного файла в другой, или следовать за строками, которые были скопированы и вставлены из другого файла и т. Д., См. Параметры -C и -M.
таким образом, псевдоним автоблейма будет "выкопать куда угодно"
git config alias.findandblame \
'!f() { git blame $(git log --pretty=%H --diff-filter=AM -1 -- "$1") -- "$1"; }; f'