Как объединить группу локальных коммитов в один push в IDEA?

86

В IDEA я пытаюсь подтолкнуть несколько коммитов.

У меня есть требование, чтобы на удаленном сервере это выглядело как одно действие.

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

Я ожидал увидеть здесь флажок сквоша, но не вижу его.

Пожалуйста, помогите мне.

gstackoverflow
источник
2
Не могу дать совет IDEA, но сжатие является частью интерактивного перебазирования или слияния, а не фиксации. Попробуйте поискать там.
musiKk

Ответы:

117

Вы можете сделать это с помощью rebase. Перейдите в VCS / Git / Rebase . Затем выберите вариант « Интерактивный» . Он покажет вам список коммитов, где вы можете выбрать, какие из них хотите раздавить.

После того, как вы нажмете « Начать перебазирование», вам будет предложено ввести сообщение о сдавленной фиксации. После этого вы можете нажать свою сжатую фиксацию с помощью диалогового окна push.

Диалог сквоша

Дополнительная информация о перебазировании в IntelliJ находится здесь .

Богуслав Бургхардт
источник
9
также может быть полезно прочитать эту статью Git Tools - Rewriting History, чтобы знать, что вводить в поле «Onto» диалогового окна «Rebase branch»: например, HEAD~3можно использовать для выбора последних 3 коммитов.
TmTron
когда вы объединяете несколько коммитов, теряются ли отдельные детали каждого из этих коммитов? неужели это просто выглядит как одна большая фиксация?
ycomp
@ycomp Да, интерактивная перебазировка перезаписывает историю, поэтому отдельные сжатые коммиты теряются, а на их месте создается новый.
Богуслав Бургхардт
Спасибо, ты можешь отменить сквош?
ycomp
@ycomp Я никогда не делал этого, но это должно быть возможно. Пожалуйста, обратитесь к следующим сообщениям SO: stackoverflow.com/q/10260151/1291150 , stackoverflow.com/q/134882/1291150
Богуслав Бургхардт,
35

Есть новый способ:

Контроль версий -> Журнал -> Щелкните правой кнопкой мыши фиксацию -> Interactively rebase from hereи затем вы можете выбрать / раздавить остальные коммиты.

Валентин
источник
1
Проблема с этим подходом заключается в том, что нет возможности выбрать "Squash" для нескольких коммитов, и делать это один за другим становится утомительно.
Дмитрий Сердюк
4
@DmitrySerdiuk, вы можете щелкнуть сдвигом, чтобы выбрать коммиты, которые хотите раздавить, а затем щелкните правой кнопкой мыши -> выберите сквош.
Aarjav
1
@Aarjav О, МОЙ БОГ, это именно я думал, что его не хватает! Никаких подсказок о контекстном меню в диалоговом окне.
o_nix
21

Для меня самый простой способ использования intellij:

  • Перейдите на Logвкладку и выберите коммит, из которого вы хотите раздавить
  • Щелкните правой кнопкой мыши и выберите Reset Branch to this commit
  • Выберите mixinпараметры, чтобы сохранить изменения из фиксации
  • Зафиксируйте свои изменения и не забудьте проверить Amend commitопцию
Усама Зоглами
источник
1
Это действительно самый простой способ, и я считаю его наименее утомительным и подверженным ошибкам.
davrog10 05
2
Я предлагаю, чтобы на шаге 3 было бы лучше выбрать Softвариант вместо того, Mixedчтобы все изменения уже были подготовлены для фиксации.
Provisota