Изменить корневую фиксацию в Git?
Есть способы изменить сообщение из более поздних коммитов:
git commit --amend # for the most recent commit
git rebase --interactive master~2 # but requires *parent*
Как вы можете изменить сообщение фиксации самого первого коммита (у которого нет родителя)?
Ответы
Ответ 1
Предполагая, что у вас есть чистое рабочее дерево, вы можете сделать следующее.
# checkout the root commit
git checkout <sha1-of-root>
# amend the commit
git commit --amend
# rebase all the other commits in master onto the amended root
git rebase --onto HEAD HEAD master
Ответ 2
Как и в Git версии 1.7.12, вы можете теперь использовать
git rebase -i --root
Ответ 3
Чтобы расширить ответ на ecdpalma, теперь вы можете использовать параметр --root
чтобы сообщить rebase
что вы хотите переписать root/first commit:
git rebase --interactive --root
Затем корневая фиксация появится в списке TODO переустановки, и вы можете выбрать для редактирования или перепечатки:
reword <root commit sha> <original message>
pick <other commit sha> <message>
...
Это объяснение --root
в документах Git rebase (акцент мой):
Восстановите все коммиты, доступные из <branch>
, вместо того, чтобы ограничивать их <upstream>
. Это позволяет вам переустановить корневой фиксатор на ветке.
Ответ 4
Если вы просто создадите репо и узнаете заранее, что в будущем вы буксируете поверх "первой" фиксации, вы можете вообще избежать этой проблемы, сделав пустую фиксацию в начале:
git commit --allow-empty -m "Initial commit"
и только после этого начинают делать "реальные" фиксации. Затем вы можете легко переустановить поверх этого фиксированного стандартного способа, например git rebase -i HEAD^
Ответ 5
Вы можете использовать git filter-branch
:
cd test
git init
touch initial
git add -A
git commit -m "Initial commit"
touch a
git add -A
git commit -m "a"
touch b
git add -A
git commit -m "b"
git log
-->
8e6b49e... b
945e92a... a
72fc158... Initial commit
git filter-branch --msg-filter \
"sed \"s|^Initial commit|New initial commit|g\"" -- --all
git log
-->
c5988ea... b
e0331fd... a
51995f1... New initial commit