Это то, для чего используется перебазирование: изменение истории коммита.
Примечание : перебазирование или любая другая операция, изменяющая историю коммита, изменит хэш коммита каждого коммита, поэтому истории несовместимы друг с другом, и вы не можете git push
коммитов с измененной историей если какая-либо из измененных фиксаций уже была нажата. Это следует делать только для тех изменений, которые вы внесли локально, но еще не были отправлены.
Если ваш журнал Git для начала выглядит примерно так:
4e4c39d Commit 1
fbdb7a2 Commit 2
f32770f Commit 3
de3f6dd Commit 4
942266a Commit 5
a7e80a4 Commit 6
Затем вы можете запустить git rebase -i 434c39d
(где 434c39d
- самый старый коммит, который вы не хотите изменять, в данном случае Commit 1
). Откроется редактор со списком всех коммитов:
pick 4e4c39d Commit 1
pick fbdb7a2 Commit 2
pick f32770f Commit 3
pick de3f6dd Commit 4
pick 942266a Commit 5
pick a7e80a4 Commit 6
Вы можете изменить pick
для каждого коммита, чтобы изменить способ его изменения: fixup
и squash
удаляют коммит, но сохраняют изменения (они объединены с предыдущим коммитом), в то время как drop
удалит коммит и изменения в нем. Затем сохраните, закройте редактор и git
произведет перезагрузку и применит изменения, указанные вами, в истории Git.
В вашем примере, если вы хотите удалить коммиты, но сохранить изменения, например, вы можете сделать
pick 4e4c39d Commit 1
fixup fbdb7a2 Commit 2
fixup f32770f Commit 3
fixup de3f6dd Commit 4
pick 942266a Commit 5
pick a7e80a4 Commit 6
Если вы не хотите сохранять изменения этих коммитов, вместо этого вы можете изменить fixup
на drop
.