Обратно задавливая слияние поддерева - PullRequest
5 голосов
/ 06 июня 2011

Я слил внешнюю библиотеку в свой проект, используя стратегию слияния поддерева . Я не передал опцию --squash в «git merge», поэтому теперь у меня есть вся история библиотеки (которая огромна), что приводит к вздутию хранилища. Как я могу задним числом раздавить слияние?

Моя ситуация такова:

Z--Y--..--B--A
              \ 
           D---E---F---G master

Я бы хотел получить:

           D---E---F---G master

Где E - коммит, содержащий слияние.

Я думаю, что решение будет включать 'git rebase', но я не уверен, как правильно его использовать в этом случае.

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Помните, что если вы уже опубликовали E или более поздние коммиты в master для удаленного, то НЕ делайте ребаз на них, так как это нарушит код других, и вам также нужно будет вручную исправить их репозитории.

Rebase создает новые ревизии, он не может магически изменять существующие (поэтому он использует SHA1, поэтому вы уверены, что ваш коммит содержит то, что сгенерировало этот конкретный SHA1 и не было изменено)

Но если вы готовы к этому, переходите к моему примеру.

  1. Сначала вам нужно вернуться к фиксации прямо перед тем, как объединить библиотеку, создать оттуда именованную ветвь, скажем, 'lib-squash'
  2. git merge --squash library; git commit
  3. git checkout master
  4. git rebase -i -p --onto lib-squash <sha1 old merge commit>
  5. опционально git branch -D library и git branch -d lib-squash

Это оставляет вас с чистой историей, но вы просто переписали историю, вам нужно нажать на флаг --force, и тогда каждый человек должен будет исправить свой репозиторий:

  1. git fetch
  2. git checkout master
  3. git reset --hard origin/master, при условии, что у вас нет других локальных коммитов, кроме удаленного хранилища
  4. если у вас есть какие-либо локальные коммиты, вам также необходимо «перебазировать» эти коммиты.

К сожалению, я не нашел статьи об отделении исторических коммитов без влияния на будущие коммиты.

1 голос
/ 06 июня 2011

Rebase должен помочь вам в этом. Эта статья должна дать вам достаточно указателей, чтобы разобраться в этом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...