git - удаляет несколько коммитов между - PullRequest
0 голосов
/ 10 мая 2018
Сценарий

git log:

Фиксация 1

Фиксация 2

Фиксация 3

Фиксация 4

Фиксация 5

Фиксация 6

Мне нужно удалить коммиты 2-4 между выполнением финального журнала git как

Фиксация 1

Фиксация 5

Фиксация6

Как лучше всего это сделать?

1 Ответ

0 голосов
/ 10 мая 2018

Это то, для чего используется перебазирование: изменение истории коммита.

Примечание : перебазирование или любая другая операция, изменяющая историю коммита, изменит хэш коммита каждого коммита, поэтому истории несовместимы друг с другом, и вы не можете 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.

...