2015-12-02 3 views
1

Есть ситуацию:Как очистить историю Git?

  1. [добавить много файлов] Разработчика добавил случайно внешние зависимости в хранилище (тысячи файлов).
  2. [make commit] После этого добавлено несколько коммитов.
  3. [удалить много файлов] Затем он увидел внешние зависимости в репозитории и удалил их.
  4. [make commit] И в конце концов сделайте некоторые коммиты и нажмите, чтобы оспаривать.

И теперь я вижу в статистике Github, что разработчик добавил строки 1kk и удалил строки 1kk.

Как я могу очистить историю Git? Как изменить эти коммиты и удалить эти файлы из истории?

Спасибо

ответ

0

Использование git-filter-branch с --tree-filter или --index-filter.

Дополнительная информация по ссылке.

1

Вы можете использовать git rebase -i <last good commit> затем в редакторе выбрать сквош коммиты добавления и удаления файлов в один

Это имеет тот недостаток, что означает, что у вас есть только один совершить, где вы могли бы хотеть двух наборов изменений отдельный.

Также вы должны переписать историю и должны быть осторожны, чтобы ваши разработчики перезагрузились в вашу новую историю.

+0

Что делать, если также содержит необходимые изменения? Можно ли разделить фиксацию? – comm1x

+0

Обратите внимание, что использование только 'rebase' не удаляет содержимое из истории git. – dan

+0

@ comm1x Возможно, есть остановка переустановки при неудачной фиксации, и вы можете вручную отредактировать дерево, чтобы оно находилось в состоянии, которое вы хотите зафиксировать. – mcfedr

2

Вы можете использовать GitHub рекомендуется steps с использованием:

  1. Использование filter-branch и на этапе 3 вместо Rackfile добавить свой каталог или файлы, которые были добавлены случайно. Также следуйте шагу 8, это очень важно, так как вы изменяете историю.
  2. Используйте BFG, а также сообщите другим разработчикам о необходимости переустановки, поскольку BFG также изменит историю.
+0

@Basilevs Спасибо, исправил ссылку. – dan

Смежные вопросы