Ответ 1
Наконец-то я решил свою оригинальную проблему, используя:
git filter-branch --tree-filter '
if [ -f <old name> ]; then
mv <old name> <new name>
fi' --force HEAD
Я хочу переименовать файл для всех коммитов в репозитории git, вот что я попробовали:
git filter-branch --index-filter 'git mv -k <old name> <new name>' HEAD
Эта команда прошла через все коммиты в репозитории, но в итоге сообщение
ПРЕДУПРЕЖДЕНИЕ: Ref 'refs/heads/master' не изменяется
что означает, что ничего не изменилось. Что здесь было не так?
Обратите внимание, что файл, который я хотел переименовать, не существует из первого коммита,
поэтому, если я не использую -k
в git mv
, я имею в виду, если я использую:
git filter-branch --index-filter 'git mv <old name> <new name>' HEAD`
Git будет выходить из строя при попытке первой фиксации сказать что-то вроде "плохо источник... ".
Наконец-то я решил свою оригинальную проблему, используя:
git filter-branch --tree-filter '
if [ -f <old name> ]; then
mv <old name> <new name>
fi' --force HEAD
Для всех, кто интересуется просто переименованием файла - git rebase -i
будет работать нормально - включите фиксацию, которая создала файл в rebase, пометьте его edit
и просто переименуйте файл, git применит следующий правильно записывает этот файл.