Как git выполнить перезагрузку первого коммита?

Я использовал git init для создания нового репо, затем сделал три коммита. Теперь я хочу переустановить, чтобы вернуться и изменить свой первый коммит, но если я делаю git rebase -i HEAD~3, он жалуется! Если я попытаюсь сделать то же самое с HEAD~2, тогда он будет работать, но только позволит мне переупорядочить последние две коммиты.

Как я могу ссылаться на "фиксацию до каких-либо коммитов" или вернуться назад и вставить пустую фиксацию?

Ответы

Ответ 1

Простой способ, с недавним достаточно git (это уже давно, так что вы должны иметь это):

git rebase -i --root

Другим простым способом, как twalberg, отмеченным в комментарии, является использование git checkout --orphan для установки нового корневого коммита, который вы можете скопировать старый совершает на вершине. (Это то, что rebase -i --root заканчивается тем, что делает внутренне в любом случае.)

Ответ 2

Насколько я могу судить, вы не можете ссылаться на "фиксацию до того, как были какие-либо коммиты". Также не легко добавить фиксацию без родителя. Однако вы можете изменить первоначальную фиксацию, затем выбрать оригинал:

$ git log --pretty=oneline
333333 commit three
222222 commit two
111111 commit one
$ git reset --hard 111111
$ rm -fr *
$ git commit -a --amend --allow-empty -m "Initial commit"
$ git cherry-pick 111111 222222 333333
$ git log --pretty=oneline
333333 commit three
222222 commit two
111111 commit one
2c5e01 Initial commit