Удалить старый коммит: `git rebase` вызывает конфликты слияния - PullRequest
5 голосов
/ 01 ноября 2011

К сожалению, мы случайно зарегистрировали большой двоичный файл, и до сегодняшнего дня никто не заметил. Теперь я хочу отбросить этот коммит и сохранить оставшуюся историю. Я знаю о предостережениях об изменении толкаемой истории, но в этом случае я не могу избежать этого.

Я пытался достичь этого в течение ~ 1 часа, но не смог этого добиться. Лучшая команда, которую я нашел, это

git rebase --interactive --preserve-merges $(EVIL_COMMIT)^

и в редакторе комментирует 1-й коммит, который является злым.

К сожалению git rebase останавливается при слияниях и запрашивает ручное разрешение конфликтов слияний. Злой коммит добавляет только несколько примеров файлов, которые наше программное обеспечение будет вычислять для тестирования. Таким образом, они не должны конфликтовать с просто отсутствующими примерами.

  1. Я не понимаю, откуда возникли конфликты слияния. Кто-нибудь может объяснить?
  2. Как решить эту проблему?

Я провел довольно много времени в поиске Google и SO. Некоторые темы затрагивают похожую тему, но либо используемый синтаксис недоступен в сегодняшней версии Git, либо он не работает для меня (я описал только один метод выше, потому что это самый простой подход).

Ответы [ 2 ]

6 голосов
/ 01 ноября 2011

Я бы пошел с filter-branch:

git filter-branch --prune-empty --index-filter '
  git rm --cached --ignore-unmatch path/to/file
' --all
0 голосов
/ 24 ноября 2013

Мой друг запустил удобный скрипт для очистки файлов из истории git, отметьте https://github.com/donquixote/gitpurge

...