Помните, что если вы уже опубликовали E или более поздние коммиты в master для удаленного, то НЕ делайте ребаз на них, так как это нарушит код других, и вам также нужно будет вручную исправить их репозитории.
Rebase создает новые ревизии, он не может магически изменять существующие (поэтому он использует SHA1, поэтому вы уверены, что ваш коммит содержит то, что сгенерировало этот конкретный SHA1 и не было изменено)
Но если вы готовы к этому, переходите к моему примеру.
- Сначала вам нужно вернуться к фиксации прямо перед тем, как объединить библиотеку, создать оттуда именованную ветвь, скажем, 'lib-squash'
git merge --squash library
; git commit
git checkout master
git rebase -i -p --onto lib-squash <sha1 old merge commit>
- опционально
git branch -D library
и git branch -d lib-squash
Это оставляет вас с чистой историей, но вы просто переписали историю, вам нужно нажать на флаг --force, и тогда каждый человек должен будет исправить свой репозиторий:
git fetch
git checkout master
git reset --hard origin/master
, при условии, что у вас нет других локальных коммитов, кроме удаленного хранилища
- если у вас есть какие-либо локальные коммиты, вам также необходимо «перебазировать» эти коммиты.
К сожалению, я не нашел статьи об отделении исторических коммитов без влияния на будущие коммиты.