Слияние, перебазирование или другая альтернатива?

Мое приложение требует постоянных слияний из нескольких веток в день, а иногда и нескольких выпусков в день. Мне нравится способность rebase помочь мне изолировать от основной ветки только код, который изменился в моей функциональной ветке. Однако перебазирование часто превращается в кошмар, когда я обрабатываю 10 или 20 конфликтов при воспроизведении изменений. Каждый из этих конфликтов может быть разрешен неправильно, и я бы хотел этого избежать. Есть ли способ выполнить «быструю» перебазировку, при которой он фактически не воспроизводит изменения из перебазированной ветки, а просто использует последнюю из этой ветки и изменяет ветвь функций таким образом, чтобы она содержала только отличия от ветки. последняя перебазированная ветка? т.е. он не заботится об истории, он просто выполняет различие и использует патч для последней из каждой ветки для перебазирования?


person Walt Howard    schedule 09.02.2015    source источник


Ответы (1)


То, что вы ищете, - это сквош, который вы можете сделать при слиянии с git merge --squash и перебазировать немного сложнее.

Однако, если вы просто просматриваете код и хотите увидеть, что изменилось в ветке функции (а не разница между веткой и главной), вы можете использовать git log master..branch, чтобы увидеть все изменения в ветке, и git diff master...branch (обратите внимание на тройной точка), чтобы увидеть, что было изменено в ветке.

git diff [--options] <commit>...<commit> [--] [<path>...]
   This form is to view the changes on the branch containing and up to the second
   <commit>, starting at a common ancestor of both <commit>. "git diff A...B" is
   equivalent to "git diff $(git-merge-base A B) B". You can omit any one of
   <commit>, which has the same effect as using HEAD instead.

См. справочную страницу gitrevisions и Выбор редакции в Pro Git для получения дополнительных сведений о тройной точке.

person Schwern    schedule 10.02.2015
comment
Вот что я сейчас делаю, git rebase -i. Это настоящая головная боль, потому что он воспроизводит все изменения. Я не хочу этого. Часто один и тот же фрагмент кода редактируется снова и снова, и во время перебазирования мне приходится разрешать конфликты снова и снова, когда все, что меня волнует, - это окончательная версия master и ее сравнение с моей веткой. Когда я… слияние, это одностадийный процесс. Мне просто нужно один раз разрешить конфликты. Я бы хотел, чтобы это было так просто. Я не знал об этой команде diff ... Это может очень помочь. Спасибо. - person Walt Howard; 10.02.2015