Объединение различных коммитов в один без слияния - PullRequest
11 голосов
/ 18 июля 2011

Можно ли присоединиться к различным коммитам?

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

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

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

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

EDIT:

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

Ответы [ 3 ]

15 голосов
/ 18 июля 2011

Хороший, интерактивный способ с git rebase -i.Посмотрите ветку, посмотрите историю и выберите коммит, который находится перед первым коммитом, к которому вы хотите «присоединиться» (это называется сжатие).Затем

git rebase -i <the commit>

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

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

Найдите первый коммит из тех, к которым вы хотите присоединиться.Оставьте этот набор «выбрать».Затем, для всех тех, кого вы хотите раздавить, измените «выбор» на «сквош» или просто «s».Обозначение коммита «сквош» означает, что он будет объединен с коммитом непосредственно перед (над) ним.Затем сохраните и выйдите.Вам будет предложено ввести новое сообщение о коммите для нового коммита, который будет создан.Сохраните это и выйдите, и все готово.Обратите внимание, что вы также можете использовать представление rebase для перемещения коммитов, перетасовывая линии вокруг.Так что, если у вас есть какие-то коммиты, которые вышли из строя или вам нужно перемещать коммиты вместе, чтобы раздавить их, вы можете сделать это тоже.Еще одно замечание: если вы отправили свои коммиты на пульт, это может привести к ухудшению ситуации, особенно если вы работаете с другими людьми, которые извлекают данные с этого пульта.вы уже выдвинули ветку, и вы знаете, что никто другой не использует ее, просто следуйте приведенным выше шагам, а затем выполните git push origin master -f, предполагая, что удаленное хранилище - «origin», и вы находитесь в основной ветке.Это нормальное нажатие, но -f говорит ему перезаписать все, что находится на пульте, и вместо этого принудительно применить ваши изменения.Когда вы работаете с репо, которым делятся другие, это становится опасным и / или сбивающим с толку.

2 голосов
/ 18 июля 2011

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

0 голосов
/ 25 января 2013

Если вы находитесь в окне окна, более удобный способ - использовать функцию TortoiseGIT.

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

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

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