Я случайно удалю файл из своего репо с помощью git filter-branch:
git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch images/thumb/a.JPG' HEAD
Как я могу отменить это? Является ли это возможным? то есть файл удаленно удален?
Ответ 1
Когда вы используете git filter-branch, файл резервной копии создается в
refs/original/refs/heads/master
Если вы использовали команду в ветке master. Вы можете проверить, есть ли у вас резервная копия в каталоге .git/refs. Имея это в виду, вы можете использовать эту резервную копию для восстановления ваших файлов с помощью:
git reset --hard refs/original/refs/heads/master
Ответ 2
Вероятно, более правильным способом, чем просто выполнение жесткого reset оригинального мастера, было бы восстановление all refs, переписанное git filter-branch, и, возможно, даже удаление резервных ссылок впоследствии, чтобы быть в состоянии снова вызвать git filter-branch без --force:
for orig_ref in $(git for-each-ref --format="%(refname)" refs/original/); do
git update-ref "${orig_ref#refs/original/}" $orig_ref
git update-ref -d $orig_ref # to also remove backup refs
done
И после этого:
git reset --hard master
Ответ 3
Возможно, ваш старый наконечник ветки будет сохранен в reflog. Затем вы сможете проверить неизменную фиксацию со всей предыдущей историей.