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

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

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

Поиск вокруг я нашел это решение: вставьте пустую фиксацию в качестве первоначальной фиксации (описанной здесь: Вставьте фиксацию перед фиксацией корня в Git?), сделайте переформатировать его, а затем отредактировать старую первую фиксацию с помощью поправки. К сожалению, во время rebase возникают многие конфликты с жестким слиянием (как описано здесь: git: разрешение конфликтов, вызванных rebase).

Есть ли другой способ решить мою проблему или нужно переустанавливать и редактировать все конфликты вручную?

Заранее спасибо:)

TIBO

4b9b3361

Ответ 1

Здесь команда, которая удалит строку нарушения из истории файлов во всех ваших ветвях:

git filter-branch --tree-filter 'sed -i "/sensitive information/ d" filename' -- --all

Это проверяет каждую ревизию, запускает на ней команду sed, а затем возвращает эту ревизию.

Команда sed в этом случае соответствует строкам, содержащим шаблон sensitive information в файле с именем filename, и удаляет эти строки.

Примечание: хорошо, если у вас есть резервная копия, и сначала попробуйте sed script, чтобы убедиться, что он делает то, что вы хотите, потому что для длительной истории может потребоваться довольно много времени.

Ответ 2

Я сделал эту команду, которая не выдает ошибку, когда файл не существует:

 filename=./path/to/your/filename
 filter=your_regex_here

 git filter-branch --tree-filter 'test -f $filename && sed -i.bak "/$filter/d" $filename  || echo "skipping file"' -- --all