Объединение различных коммитов в одно без слияния

Возможно ли объединение различных коммитов?

Это мой случай:

Мое приложение в OSX 10.6 и 10.7, поэтому Я исправил некоторые вещи для 10.6, затем совершил, изменен на 10.7 и исправлены исправления снова, чтобы они были совместимы, а затем снова зафиксировать. затем вернулась к 10.6 и снова проверила ее и сделала небольшую фиксацию снова и т.д. (три или четыре коммита в общей сложности, и все эти фиксации относятся к одной и той же проблеме)

Как вы видите, все эти коммиты тесно связаны, поэтому я хотел бы присоединиться к ним, возможно ли это?

Мне еще нужно работать в еще одной проблеме, поэтому я не планирую объединять текущую ветку. В идеале я хотел бы иметь только одну фиксацию для каждой проблемы/ошибки, которую я решаю.

EDIT:

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

Ответ 1

Хороший интерактивный способ - git rebase -i. Просмотрите ветку, посмотрите историю и выберите фиксацию, которая перед первой фиксацией вы хотите "присоединиться" (она называется раздавлением). Тогда

git rebase -i <the commit>

В редакторе вам будет показан список коммитов с одного сразу после того, который вы выбрали последним. Он выглядит как

pick 2f4b7fa Some commit message
pick 19f58bd Some other commit message

Найдите первую фиксацию в тех, которые хотите присоединиться. Оставьте эту настройку "pick". Затем, для всех тех, которые вы хотите вставить в это, измените "pick" на "squash" или просто "s". Маркировка фиксации "squash" означает, что она будет объединена с фиксацией непосредственно перед (выше). Затем сохраните и выйдите. Вам будет предложено новое сообщение фиксации для нового коммита, который будет создан. Сохраните это и выйдите, и все готово. Обратите внимание, что вы также можете использовать представление переустановки для перемещения, перемещаясь вокруг. Поэтому, если у вас есть какие-то коммиты, которые вышли из строя, или вам нужно переместить фиксации вместе, чтобы раздавить их, вы тоже можете это сделать. Еще одно замечание: если вы переместили свои коммиты на удаленный компьютер, это может повредить, особенно если вы работаете с другими людьми, которые выходят с этого пульта.

Изменить. Поскольку вы уже оттолкнули ветвь, и знаете, что никто ее не использует, просто выполните описанные выше шаги, а затем выполните git push origin master -f, предполагая, что удаленное репо "происхождение", и вы находитесь на главной ветке. Это нормальный толчок, но -f сообщает ему перезаписать все, что находится на пульте, и заставлять ваши изменения применять вместо этого. Это когда вы работаете с репо, разделяемым другими, что это становится опасным и/или запутывающим.

Ответ 2

Вы подтолкнули свои коммиты? Если нет, вы можете попробовать git rebase -i. У него есть опция сквоша для объединения коммитов. Вот полезная ссылка.

Ответ 3

Если вы находитесь в окне окна, более удобным способом является функция TortoiseGIT.

  • Откройте всплывающее меню "Показать журнал"
  • выберите фиксацию
  • щелкните правой кнопкой мыши
  • 'Объединить с одной фиксацией

сделает всю работу за вас, без ужасных VIM-танцев:)