Забыл использовать `--squash`, и теперь история коммитов в беспорядке. Как я могу очистить этот беспорядок?

Я должен был выполнить subtree pull --squash для стороннего модуля, от которого зависит мой проект, но случайно забыл поставить --squash. Теперь история коммитов моего проекта заполнена фиксациями сторонних модулей. Они разбросаны по всему журналу.

Это безобразие нужно убрать. Как мне определить все коммиты, принадлежащие стороннему модулю, объединить их в один, а затем удалить их из истории моего проекта, если это вообще возможно?

Дополнительная информация:

Обратите внимание, что я сделал несколько коммитов, которые собираюсь сохранить после неудачной операции.


person tamakisquare    schedule 10.09.2013    source источник


Ответы (1)


  1. Используйте git reflog, чтобы найти состояние вашего проекта до того, как вы выполнили неработающую операцию.
  2. Проверьте этот хэш или git reset --hard к нему.
  3. Повторите операцию с правильными флагами.
person Carl Norum    schedule 10.09.2013
comment
Спасибо, Карл. Моя ситуация, однако, немного сложнее. Я сделал несколько коммитов, которые нужно сохранить после сломанной операции. Как я могу отменить прерванную операцию, выборочно сохраняя некоторые коммиты, которые произошли после прерванной операции? - person tamakisquare; 11.09.2013
comment
Знаете ли вы, какие коммиты ваши? Просто выберите или перебазируйте их после того, как вы все исправите. - person Carl Norum; 11.09.2013
comment
Для удаления коммитов, оставшихся после операции unsquashed, попробуйте следующее: Garbage Collect Commits in Git - person Maic López Sáenz; 11.09.2013
comment
@LopSae - Спасибо за совет. Я ломал голову, как с этим бороться. - person tamakisquare; 12.09.2013
comment
Я прекрасно знаю это чувство :) - person Maic López Sáenz; 12.09.2013