Как правильно сделать git pull-with-rebase после объединения веток - PullRequest
0 голосов
/ 14 февраля 2020

Альтернативное название: Как получить sh объединить коммиты?

В моем локальном репозитории есть следующее состояние:

      C     (origin/feature)
     /
A - B - m   (feature)
       /
  Y - Z     (master)

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

Однако! Подлый Дэн только что перенес свое изменение в ветку, в которую я сливался (C). Когда я сейчас пытаюсь и пу sh, я не могу. Сначала я должен получить изменения и каким-то образом объединить их. Вопрос в следующем: как?

Если я выполняю вытягивание с помощью rebase, мне в конечном итоге приходится разрешать все конфликты при слиянии между B & Z. Если я пытаюсь слиться, я получаю две фиксации слияния , который не так чист, а также не должен быть таким необходимым.

      C --
     /     \
A - B - m - m2
       /
  Y - Z

Есть ли способ сдавливания m и m2 такой, что это выглядит так:

      C --
     /     \
A - B    -- m3
       /
  Y - Z

Интерактивная перебазировка, очевидно, не показывает коммитов слияния, а вишневый пик требует, чтобы я снова разрешил все конфликты слияний (между B & Z, на которые C вообще не влиял).

Ответы [ 2 ]

0 голосов
/ 17 февраля 2020

Чтобы go из:

      C --
     /     \
A - B - m - m2
       /
  Y - Z

до:

      C --
     /     \
A - B    -- m3
       /
  Y - Z

, вы можете использовать git commit-tree, как предложено в в этом ответе :

git commit-tree -p C -p Z m2^{tree}
0 голосов
/ 14 февраля 2020

Если вы действуете на ветви функций и имеете только локальные изменения, я бы посоветовал вам отказаться от локального слияния и выполнить повторное слияние с C.

# from your local 'feature' branch :
git checkout feature

# set your local branch to Dastardly Dan's version :
#    WARNING: do save (or commit) your local changes before running reset --hard,
#        they will be lost otherwise.
git reset --hard origin/feature

# you are now in 'C' state, merge master
git merge master

Другой вариант - попросить Дэна перебазировать его работу (коммит C на диаграмме) поверх вашего слияния (коммит m), чтобы достичь:

A - B - m - C' <-feature, origin/feature
       /
  Y - Z <-master
...