Git Squash более старые коммиты - PullRequest
1 голос
/ 22 мая 2019

У меня очень грязная история. Я хочу раздавить кучу старых коммитов (не включая последний).

Я знаю, как раздавить мои последние n коммиты. Но это другое. Здесь у меня есть последовательные коммиты n1 до n2, которые я хочу раздавить в один, а после n2 у меня есть история коммитов, которые я хочу сохранить до последнего.

Итак, если моя текущая история выглядит так:

---- n1 --- n2 -------- m

Я хочу раздавить n1 до n2, чтобы получилось так:

---- n1n2 -------- m

, где n1n2 - это один коммит, содержащий сжатое содержимое от n1 до n2.

Как мне это сделать? Каковы последствия для истории от n2 до m?

То есть изменится ли хэш каждого коммита с n2 на m вследствие того, что я хочу сделать?

1 Ответ

3 голосов
/ 22 мая 2019

Вы можете сделать интерактивное обновление, для документов и этого сообщения в блоге .

  1. Запустить интерактивное обновление:

    git rebase -i HEAD~n
    

    (где n - это как далеко вы хотите вернуться в историю)

  2. Откроется ваш редактор по умолчанию.Вверху будет отображен список ваших последних n коммитов в обратном порядке.Например:

    pick a5f4a0d commit-1
    pick 19aab46 commit-2
    pick 1733ea4 commit-3
    pick 827a099 commit-4
    pick 10c3f38 commit-5
    pick d32d526 commit-6
    
  3. Укажите squash (или ярлык s) для всех коммитов, которые вы хотите раздавить.Например:

    pick a5f4a0d commit-1
    pick 19aab46 commit-2
    squash 1733ea4 commit-3
    squash 827a099 commit-4
    pick 10c3f38 commit-5
    pick d32d526 commit-6
    

    Git применяет и это изменение, и изменение непосредственно перед ним и заставляет вас объединять сообщения фиксации.

  4. Сохранение и выход.

  5. Git применит все изменения и снова откроет ваш редактор, чтобы объединить три сообщения коммита.Вы можете изменить ваши сообщения коммита или оставить все как есть (если так, то сообщения коммита всех коммитов будут объединены).

  6. Готово!Все выбранные вами коммиты будут сдавлены с предыдущим.

...