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

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

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

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

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

TIBO

27
задан TiBo 25 авг. '11 в 20:52
источник поделиться

3 ответов

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

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

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

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

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

35
ответ дан Karl Bielefeldt 26 авг. '11 в 1:39
источник поделиться

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

 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
4
ответ дан Ted Yavuzkurt 01 июля '16 в 0:37
источник поделиться

Вы можете посмотреть git filter-branch

Примеры в ссылке должны помочь вам: http://git-scm.com/docs/git-filter-branch

1
ответ дан manojlds 25 авг. '11 в 21:14
источник поделиться

Другие вопросы по меткам