2015-01-26 3 views
1

У меня есть куча старых коммитов, которые я уже нажал. Это небольшие изменения, например. опечатки ", и я хочу объединить их вместе, чтобы у меня не было 100 одинаковых коммитов.Объединить несколько старых коммитов в git, которые уже были нажаты?

например. это:

7af8cee5715e266bf249891cf66f832cf8bb6606 опечатка 53104d19d1e2eba92baf36b8384100c461e417c1 опечатка 9e5afd2afc5d6051f568ce3a441eebf087c9ea46 опечатка fb8be7c9c54ae2d9ee3ed15971de49104729e4d6 OK 48828aaf959ee76d77a74dc35b8455542d0dbb8b фиксированной связи 6387e73bd692024acbb67c1a843348dd6bd01bb8 фиксированная связь baff3fc602faab37fbd0bf7df9c61ff367121985 фиксированной Htaccess выпуск 2b3e66c19af49030a1da16f9fb7955c4d0f9aa3e фиксированной Htaccess выпуск 5224690d2a44ec0c4872bedb3b54fb55af75530a фиксированной iplogging выпуск

Примечание: они не находятся непосредственно за последним фиксатором, это несколько месяцев назад.

+0

Для этого потребуется переписать историю в вашем репозитории. Вы были бы довольны этим? –

+0

@ ThorbjørnRavnAndersen Я только нажимаю на репозиторий веб-сервера, к которому обращается только я, так что да. – tgun926

+0

Затем загляните в раздел [История перезаписи] (http://git-scm.com/book/en/v2/Git-Tools-Rewriting-History) главы книги прогитов. –

ответ

2

Ваш единственный вариант - выполнить интерактивную перезагрузку коммитов и принудительно перетащить перезаписанные коммиты в серверный репозиторий. Я рекомендую сохранить историю как есть, если коммиты с этого времени содержат коммитацию.

  1. Сначала найдите SHA первой фиксации, которую вы хотите изменить, например. 522469.
  2. Проверить, если слияние филиалов с: git log --oneline --merges 522469~1. Если это генерирует вывод, не запускайте интерактивную перезагрузку.
  3. Запустить интерактивную перебазироваться: git rebase --interactive 522469~1
  4. мерзавец представит вам список фиксаций, начиная с 522469, что вы можете изменить порядок. Измените команду pick (первый столбец) на squash или fixup для фиксации, которую вы хотите объединить.
  5. Измените порядок и squash/fixup на содержание вашего сердца, сохраните файл и закройте редактор.
  6. После того, как была выполнена интерактивная перезагрузка, проверьте свою сборку.
  7. Как последний шаг, сила, толчок переписанной истории в удаленном хранилище: git push --force origin HEAD

Некоторые вещи, чтобы иметь в виду:

  • Если есть слияние зафиксируется, интерактивный перебазироваться удалит их , Поэтому, пожалуйста, не git rebase --interactive если # 2 сгенерированный выход.
  • Интерактивная ребаза влияет только на фиксации текущих ветвей (то есть достижимая на HEAD). Любые ветки, основанные на каких-либо коммитах в окне редактора (git branch --contains 522469), должны быть переустановлены из их перезаписанных копий. Таким образом, может быть больше работы, чем показано выше. Проверьте git rebase --onto.
  • В будущем, когда вы обнаружите, что вам нужно изменить/исправить последнее совершение, используйте git commit --amend, чтобы переписать фиксацию HEAD вместо создания новой фиксации. Другой вариант - git rebase --interactive с меньшим количеством коммитов (например, не месяц назад, а 2 часа назад, HEAD~10), который может представлять меньший потенциал конфликтов.
+0

Это было не весело. – tgun926

Смежные вопросы