git: полное удаление коммитов с файлом из истории (возможно ли?)

IDE, VCS и прочее

Модератор: Модераторы разделов

Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

git: полное удаление коммитов с файлом из истории

Сообщение t.t »

К примеру, есть такое дерево:

Код: Выделить всё

$ git whatchanged --graph --decorate | egrep -v '(Author|Date):'
* commit c49c23f8f539f5d20d4a64f0348c8d47301a75d7 (refs/heads/master)
|
|     a1

:000000 100644 0000000... d00491f... A a
|
* commit 91bbabf33637a09f5de91cd068ca11c50dcc17df
|
|     b2

:100644 100644 d00491f... 0cfbf08... M b
|
* commit 65cbc005f451c58c5a7a1fe3926c3712764d0519

      b1

:000000 100644 0000000... d00491f... A b


Можно ли полностью удалить коммиты с конкретным файлом (b в примере): так, как будто они вообще никогда не были сделаны, а файла этого никогда не существовало? В реальной жизни там может быть не один файл, а, скажем, каталог; суть в том, что затрагивающие его коммиты ничего другого не касаются.

filter-branch --treefilter 'rm -f b' содержимое файла из коммитов удаляет, но записи о коммитах в логе остаются. Очень не хотелось бы, чтобы эти совершенно пустые коммиты там болтались.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
IMB
Сообщения: 2561
ОС: Debian

Re: git: полное удаление коммитов с файлом из истории

Сообщение IMB »

Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: git: полное удаление коммитов с файлом из истории

Сообщение t.t »

То что нужно. Спасибо.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: git: полное удаление коммитов с файлом из истории

Сообщение t.t »

Возникла более сложная, но смежная задача, и в рассылке git мне подсказали про опцию --prune-empty у команды filter-branch. Пока не пробовал, но похоже, что это то что нужно.

Сегодня как раз появилась возможность новый git поставить, буду пробовать (в 1.5.6 этой опции нет).
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали: