[devel] Q: [git] Как разбить большой коммит на несколько?

Led ledest at gmail.com
Tue Sep 29 17:46:21 UTC 2009


On Tuesday 29 September 2009 20:22:46 Kharitonov A. Dmitry wrote:
> Led wrote:
> > On Tuesday 29 September 2009 19:59:27 Kharitonov A. Dmitry wrote:
> >> Aleksey Avdeev wrote:
> >>> Led пишет:
> >>>> On Tuesday 29 September 2009 18:24:42 Aleksey Avdeev wrote:
> >>>>> Led пишет:
> >>>>>> On Tuesday 29 September 2009 17:27:55 Aleksey Avdeev wrote:
> >>>>>>> Приветствую.
> >>>>>>>
> >>>>>>>    А как, в git, разбить один большой коммит на несколько?
> >>>>>>>
> >>>>>>> PS: Описание решения подобной задачи мне кажется где-то
> >>>>>>> попадалось. Но
> >>>>>>> сейчас, когда оно потребовалось -- что-то не находиться...
> >>>>>>
> >>>>>> git help rebase
> >>>>>> смотреть секцию SPLITTING COMMITS
> >>>>>
> >>>>>    Спасибо, это оно (git gui весьма сильно помогает).
> >>>>>
> >>>>>    А есть ли вариант rebase, учитывающий мержы? В смысле: как сделать
> >>>>> rebase так, чтобы была не одна ветка, а дерево?
> >>>>>
> >>>>> PS: Собираюсь делать rebase кусками, между точками мержей, а сами
> >>>>> мержи -- повторять руками... Есть ли путь проще?
> >>>>
> >>>> rebase с ключём -p
> >>>> Но лучше резервную копию перед этим сделать:)
> >>>
> >>>   Бранча или всего репозитория?
> >>
> >> Бранча.
> >> Это совсем не лучший вариант. Лучше создать патч из комита, который
> >> хочешь разбить примерно так :
> >> git-show git-show -p --raw HEAD >same.patch
> >>
> >> потом руками в редакторе создать из него несколько патчей и приложить
> >> обратно примерно так:
> >> git-apply --whitespace=nowarn --numstat --index --apply same.patch;
> >> git-rm (если нужно)
> >> git-add (если нужно)
> >> git-commit -a
> >
> > Конечно, можно гланды и через извесное место удалять. Но называть этот
> > вариант лучшим?..
>
> А вы пробовали?

Да

> Я на прошлой неделе этим занимался и начал с rebase, убив больше дня и
> испортив два репозитария. Потом пошёл описанным выше путём и сделал всё
> за 2 часа. И, что мне особенно понравилось, удалось разбить правки в
> одном файле на несколько соммитов ничего не потеряв.

На самом деле, мне очень редко приходится делать глобальный rebase - разве 
что, по нескольким последним коммитам и только по ещё неопубликованному.
Пробуманное бранчевание, merge, точечный cherry-pick и revert при 
необходимости - вполне достаточно.

-- 
Led


More information about the Devel mailing list