Использование git rebase -i для сжатия коммитов в одной ветке, столкновение с конфликтами слияния - PullRequest
1 голос
/ 14 июня 2019

Меня попросили использовать git rebase -i, чтобы раздавить набор из 4-5 смежных коммитов в 1 коммит пару недель назад. С тех пор были некоторые коммиты. Поэтому на следующей диаграмме я бы хотел объединить коммиты от B до F в один коммит:

A - B - C - D - E - F - G - H - I ...
    |               |
    - Want to squash- 

Я бегу

git rebase -i 8007a14d

(где 8007a14d - хеш А), найдите коммиты, которые я хочу раздавить, и закройте файл. Но после закрытия меня попросили разрешить несколько конфликтов слияния. Не слишком знакомый с кодом после коммита G, я решил прервать его.

Это кажется мне немного странным. Я предполагаю, что git будет воспроизводить коммиты / различия в том порядке, в котором они были зафиксированы. В качестве проверки работоспособности я попытался выполнить git rebase и оставил все коммиты как «pick», и у меня все еще возник конфликт слияния. Может ли кто-нибудь помочь мне разобраться в этом? Спасибо!

1 Ответ

0 голосов
/ 14 июня 2019

Предполагая, что я в хронологическом порядке в филиале

git checkout F
git reset --soft A # move pointer of branch to A, do not change content, all differences will be in index
git commit -m "Squashed stuff" # now you have a single revision after A that has a tree exactly like F
git cherry-pick F..I # replay everything after the squashed revisions

И теперь все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...