Подтвердить что ты не робот

Отменить git фильтр-ветвь

Я случайно удалю файл из своего репо с помощью git filter-branch:

git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch images/thumb/a.JPG' HEAD

Как я могу отменить это? Является ли это возможным? то есть файл удаленно удален?

4b9b3361

Ответ 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. Затем вы сможете проверить неизменную фиксацию со всей предыдущей историей.