Git/recommit

Материал из ALT Linux Wiki
< Git
Версия от 16:05, 28 июля 2008; PhpCoder (обсуждение | вклад) (Import from freesource.info)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


Как поправить commit

Для последнего коммита достаточно git commit --amend, который перезакоммитит при выполнении ряда разумных условий добавленные после коммита изменения "заодно".

ниже -- фрагмент письма Alexey Tourbin в devel@ [...]

То есть по сути иногда не хочется делать новые коммиты, которые являются мелкими исправлениями к предыдущим коммитам. Поэтому я предлагаю такое правило для использования git push --force: нельзя заменять коммиты дальше последнего публичного тага, или же дальше коммита, отправленного на сборку в incominger.

Допустим, что эти условия выполнены, а исправления мелких/глупых ошибок не хочется оформлять отдельно. Для примера объясню, как поправить пред-предпоследний коммит.

Сначала нужно сохранить текущую работу во временный бранч:

$ git branch save

Потом нужно откатить работу до пред-предпоследнего коммита:

$ git reset --hard HEAD^^

Теперь нужно поправить пред-предпоследний коммит, который стал текущим:

$ vim ...
$ git commit -a --am

Затем поверх пред-предпоследнего коммита нужно накатить предпоследний и последний коммиты из сохраненного бранча:

$ git cherry-pick -r save^
$ git cherry-pick -r save

Осталось только удалить временный бранч:

$ git branch -D save

После этого уже можно сделать

$ git push --force git.alt

(Последнее означает, что содержимое .git/remotes/git.alt может выглядеть как URL: git.alt:/people/$USER/packages/%name.git)