Как я могу объединить два коммитов git - PullRequest
4 голосов
/ 16 декабря 2010

Я выполнил серию коммитов, и теперь я вижу, что хотел бы, чтобы слились 2 коммита. Не последние два, но немного дальше

Мой журнал:

commit 326f35d83963660893d065e480f231b76f052dd2
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:13:47 2010 +0200

    Small editing in ASR chapter

commit 652b4c27a5fcb2125ed82aea31421fca4e8eee47
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:12:55 2010 +0200

    Added longtable package for abbreviations

commit 74069a151cce9c47484403c1db76e68e1360d8ee
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:12:23 2010 +0200

    Changed some headings in the introduction

commit 94126f79fdc6f4927a3f270c152393377e9ef5a5
Author: Peter Smit <peter@something.eu>
Date:   Thu Dec 16 11:11:57 2010 +0200

    Added abbreviations chapter

Все четыре коммита меняют отдельные файлы, поэтому конфликтов слияния быть не может.

Я хотел бы добавить 652b4 (добавлен longtable) в коммит 94126 (добавлены сокращения). Как я могу это сделать?

Ответы [ 2 ]

10 голосов
/ 16 декабря 2010

Эта ситуация обрабатывается интерактивным перебазированием .Применяется стандартное предупреждение о том, что история перезаписи не была передана.Есть достойное объяснение в Git Book , но я лично нахожу интерфейс rebase -i точно перевернутым.

Начните перебазирование, назвав parent самого раннего коммита, который вам нужно изменить:

$ git rebase -i 94126f7^

Появится редактор, в котором перечислены коммиты в форвардах в хронологическом порядке (так что вам нужно перевернуть голову вверх дном).Каждый коммит от HEAD до потомка названного коммита указан в списке, поэтому вы назвали его родителя:

pick 94126f7 Added abbreviations chapter
pick 74069a1 Changed some headings in the introduction
pick 652b4c2 Added longtable package for abbreviations
pick 326f35d Small editing in ASR chapter

Что вы хотите сделать, это squash зафиксируйте 652b4c2 на 94126f7, так что вы измените его команду на «squash» и переместите ее сразу после последней:

pick 94126f7 Added abbreviations chapter
squash 652b4c2 Added longtable package for abbreviations
pick 74069a1 Changed some headings in the introduction
pick 326f35d Small editing in ASR chapter

Сохранить и выйти;следующий всплывающий редактор будет для комбинированного сообщения коммита.Вы можете изменить это по своему усмотрению, тогда, когда вы выйдете, он завершит перебазирование.

Конфликты во время перебазировки могут раздражать (некоторые исправления просто не коммутируют), а слияния могут быть особенно уродливыми, но выигралНикаких проблем с изменением порядка добавления файлов.

3 голосов
/ 16 декабря 2010

Если вы еще не выполнили эти коммиты, выполните git rebase --interactive (См. Интерактивный перебазирование ).
Вы сможете объединить эти два коммита в один.

...