Могу ли я объединить несколько коммитов и сохранить сообщение от последнего? - PullRequest
0 голосов
/ 08 ноября 2019

Иногда у меня git rebase -i master и возникает такая ситуация:

pick cc1ed9d First commit
pick 9d4090c Main commit with detailed message
pick fca9df4 WIP afterthought commit with bad message

Изменяя pick последней строки на fixup, я раздавливаю ее в основной коммит, и новый комбинированный коммит используетприятное сообщение основного коммита.

Но иногда порядок отличается:

pick cc1ed9d First commit
pick fca9df4 WIP preliminary commit with failing test
pick 9d4090c Main commit with detailed message

Здесь я бы хотел сложить вместе два последних коммита, но сохранить сообщение от последнего.

Я могу сделать это с помощью кропотливого копирования и вставки, но есть ли простой способ?

Ответы [ 2 ]

1 голос
/ 09 ноября 2019

Интерактивная перебазировка предназначена для предоставления множества опций, если вы уже точно знаете, что хотите сделать, просто сделайте это:

git reset --soft @~2; git commit -C @{1}

с чистым индексом, чтобы раздавить последние два коммита вместе, сохраняясообщение подсказки коммита.

1 голос
/ 09 ноября 2019

Вы можете немного изменить то, что вы делали. Если вы измените pick (он же p) на squash (s) вместо fixup (f), то Git будет комбинировать изменения коммитов таким же образом, но вместо автоматического сохранениясообщение первого коммита вызовет ваш текстовый редактор. В нем будет предложено сообщение о коммите, которое объединяет сообщения всех последовательно сжатых коммитов, из которых вы можете редактировать все, что хотите сохранить.

Это не на 100% автоматически сохраняет только сообщениепоследний коммит, чтобы быть честным, но он, конечно, избегает упомянутого «трудоемкого копирования и вставки»!

Думайте о fixup как о squash без дополнительного шага редактирования сообщения, в основном, поэтому, изменяя сfixup до squash вы получаете полный опыт раздавливания (смеется).

...