Этот ответ улучшен на пару выше (пожалуйста, оцените их), предполагая, что в дополнение к созданию одного коммита (без истории без истории), вы также хотите сохранить все коммиты -данные этого коммита:
- Автор (имя и адрес электронной почты)
- Дата создания
- коммитер (имя и адрес электронной почты)
- Дата совершения
- Сообщение в журнале коммитов
Конечно, коммит-SHA нового / одиночного коммита изменится, потому что он представляет новую (не) историю, став бездетным / корневым коммитом.
Это можно сделать, прочитав git log
и установив некоторые переменные для git commit-tree
. Предполагая, что вы хотите создать один коммит из master
в новой ветке one-commit
, сохраняя данные коммита выше:
git checkout -b one-commit master ## create new branch to reset
git reset --hard \
$(eval "$(git log master -n1 --format='\
COMMIT_MESSAGE="%B" \
GIT_AUTHOR_NAME="%an" \
GIT_AUTHOR_EMAIL="%ae" \
GIT_AUTHOR_DATE="%ad" \
GIT_COMMITTER_NAME="%cn" \
GIT_COMMITTER_EMAIL="%ce" \
GIT_COMMITTER_DATE="%cd"')" 'git commit-tree master^{tree} <<COMMITMESSAGE
$COMMIT_MESSAGE
COMMITMESSAGE
')