как объединить локальные коммиты в развивающейся ветке в git? - PullRequest
2 голосов
/ 06 декабря 2011

У меня есть локальная ветка разработки "dev" и удаленная ветка "master".Для ветки "dev" у меня довольно сложная история коммитов (около 20 последовательных коммитов).Я пытался использовать

"git rebase -i origin/master" 

в "dev", однако я обнаружил, что этот процесс очень подвержен ошибкам (вы должны применять каждый коммит один за другим и разрешать конфликты ...) и разочаровывать ...Теперь мне нужно сжать историю коммитов в «dev» до одного коммита и отправить этот большой коммит в «master» для просмотра и слияния.Есть ли безопасный и эффективный способ сделать это?Большое спасибо, ребята!

Ответы [ 2 ]

1 голос
/ 06 декабря 2011

Я бы сделал что-то подобное:

$> git merge-base dev origin/master
<commit>

Все, что возвращается, будет точкой слияния, которая будет использоваться для сжатия ваших коммитов ...

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

$> git reset <commit>

Это фактически поместит все изменения ваших 20 последовательных коммитов обратно в раздел "измененные файлы" в git status ...

Затем просто создайте новый коммит вот так (убедитесь, что git add - здесь все, что вам нужно):

$> git add --all
$> git commit -m "my squeezed stuff"

Тогда исправьте свои конфликты и подтолкните к происхождению ...

Надеюсь, это поможет,

0 голосов
/ 20 ноября 2012

Если сбрасывать текущую ветку проблематично, создание новой является хорошей альтернативой (и вы сделали это), но вам не нужно копировать все.

После создания dev2 (на основеmaster), вы можете checkout dev, а затем checkout dev2 без изменения каких-либо файлов (!) из dev, присутствующих в данный момент в рабочем каталоге.
См. " switch git branch без проверки файлов ":

git symbolic-ref HEAD refs/heads/dev2
git reset

Тогда вы можете добавить все и зафиксировать.

...