Объедините несколько коммитов. Git ReBase - PullRequest
2 голосов
/ 13 декабря 2011

У меня было это

-A-B-C-D-

и

-A-E-F-G-

Я сделал слияние, и это то, что у меня сейчас

-A-B-C-D-------H-I-
  \           /
   ------E-F-G

Как мне это получить?

-A-B-C-D-J-

Мне нужно объединить E, F, G, H, I в один новый коммит.

Извините за глупый вопрос. Я читаю человека, но не могу понять.

2 Икке: Да. H - коммит слияния. 2 Шахбаз: мне это нужно, потому что код на commit-E не может быть собран (не моя ошибка =)), а commit-G исправляет его.

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Это, безусловно, самый быстрый метод:

 # make sure you're on the branch that's at commit I
 git reset --soft <commit-D>
 git commit

reset --soft сбрасывает текущую ветвь для указания на данный коммит, но оставляет рабочее дерево и индекс (область подготовки) такими, какими они были, поэтомучто когда вы фиксируете, вы фиксируете весь контент, который был там на I, за один коммит с D в качестве родителя.

(Вы можете сделать это с помощью других инструментов, но в этом случаеэто все что тебе нужно!)

0 голосов
/ 13 декабря 2011

A merge --squash должно быть достаточно, чтобы получить ожидаемый результат.

 git checkout branch_of_D
 git merge --squash branch_of_G

См. " В git, в чем разница между слиянием --squash и rebase? ".
Пример использования merge --squash, см. « Как использовать GIT merge --squash? ».

0 голосов
/ 13 декабря 2011

То, что вам нужно, это коммиты на сквош: прочитайте это: http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html

...