Git - Повторяющаяся проблема с фиксацией

Я случайно создал коммит "неизвестно" в моем репозитории и решил попробовать запустить команду здесь:

git filter-branch --commit-filter '
        if [ "$GIT_COMMITTER_NAME" = "unknown" ];
        then
                GIT_COMMITTER_NAME="..";
                GIT_AUTHOR_NAME="..";
                GIT_COMMITTER_EMAIL="...";
                GIT_AUTHOR_EMAIL="...";
                git commit-tree "[email protected]";
        else
                git commit-tree "[email protected]";
        fi' HEAD

Сначала я подумал, что все в порядке, пока я не заметил в gitk, что каждая фиксация до запуска этого была дублирована, а не просто отредактирована, как я думал изначально.

Можно ли очистить это?

РЕДАКТИРОВАТЬ: ОК, gitk показывает как старые коммиты (те, у которых "неизвестные" участники смешиваются), так и новые коммиты (переписанные), разделенные в определенной точке вокруг наполовину. Подумайте, куча коммитов, затем дублируется (и с редактированием) и складывается поверх оригинальных. Я хочу, если это возможно, удалить исходные.

Ответы

Ответ 1

Ответом были файлы в .git/refs/original, и как команда, которую я нашел, не должна была заканчиваться в HEAD, а вместо этого с --tag-name-filter cat -- --all.

Приветствует _Vi и был хостом из канала #git для справки.

Ответ 2

Если вы знаете последнюю хорошую фиксацию, сохраните свой бекон с этим:

git reset <last_good_commit>   # Warp back to a good state.
git push -f master             # Push the changes up (you need -f to force it to
                               #  obliterate old commits).

Если вы хотите более осторожно пройтись (например, если есть хорошие и плохие коммиты после <last_good_commit>), используйте git rebase -i для вишни - выберите хорошие, которые должны остаться.