Ваш вопрос мне не совсем понятен. Я думаю, вы хотите, чтобы новая ветвь содержала серии коммитов, которые "эквивалентны" тем, которые есть в dev , но не содержат ненужных изменений пробелов.
Самый простой способ сделать это с git rebase --interactive
. Это позволяет вам редактировать серию коммитов вручную. Вы можете получить хэш первого («корневого») коммита с помощью git rev-list HEAD | tail -n 1
. Если вы также хотите отредактировать первый коммит, это сложнее, но на это есть SO-ответ.
git checkout dev
git checkout -b magic
git rebase --interactive $(git rev-list HEAD | tail -n 1)
Это вызывает редактора в списке коммитов в прямом хронологическом порядке. Вы изменяете pick на edit на коммитах, которые вы хотите изменить. Затем git остановится перед обработкой каждого из этих коммитов, что позволит вам изменить его с помощью git commit --amend
, а затем продолжить перебазирование с помощью git rebase --continue
. Конечно, вы можете запустить скрипт для очистки файлов, а не редактировать их вручную. Если вы хотите сделать это, основываясь на отличиях от предыдущего коммита, вам нужно будет использовать что-то вроде git cat-file blob HEAD^:filename
, чтобы извлечь предыдущую ревизию, или использовать git diff HEAD^ filename
.
Если вы хотите автоматизировать весь процесс, вы можете использовать git filter-branch --tree-filter script
. Посмотрите man-страницу для git-filter-branch для подробностей.
Если вы хотите, чтобы в будущих коммитах не было ошибок, вы можете настроить pre-commit hook , чтобы запретить их.
Когда вы довольны новой веткой magic , вы можете использовать ее для замены dev :
git branch -m dev dev-old
git branch -m magic dev
Однако учтите, что это может вызвать проблемы у людей, у которых уже есть копия dev в их собственных репозиториях. Тогда лучше сделать слияние.