Перебазирование коммитов, которые идентичны по содержанию, но различаются по хешу - PullRequest
2 голосов
/ 09 января 2020

В проекте, над которым я работаю, есть странная система, в которой я могу по существу вводить новые коммиты для добавления к мастеру. Вместо того, чтобы фиксировать патчи по мере их установки, они слегка изменяются в своих метаданных (хотя контент на 100% идентичен). К сожалению, это означает, что мои локальные идентификаторы фиксации не совпадают с удаленными после прохождения через систему. Т.е. представьте, что у меня есть локальная копия удаленного репозитория с тремя коммитами:

C1 -> C2 -> C3

Теперь я локально создаю три новых коммита локально, от X4 до X6

C1 -> C2 -> C3 -> X4 -> X5 -> X6

Затем я отправляю X4 в систему, которая изменяется на C4 (содержимое идентично, ха sh отличается). Это означает, что пульт дистанционного управления теперь имеет

C1 -> C2 -> C3 -> C4

и мой локальный

C1 -> C2 -> C3 -> X4 -> X5 -> X6

Я хотел бы вытащить с пульта C4, отбросьте мой локальный X4 и добавьте X5 к `C4, чтобы я локально получил:

C1 -> C2 -> C3 -> C4 -> X5 -> X6

Прямо сейчас я делаю это, выполняя локально git format-patch, затем git reset --hard origin/master и git pull, затем git am только с X5 и X6. Это раздражающий и утомительный процесс, есть ли лучший способ?

Ответы [ 2 ]

1 голос
/ 09 января 2020

Локальный репо

C1---C2---C3---X4---X5---X6 (master)

Удаленный репо

C1---C2---C3---C4 (origin/master)

Извлечение изменений из удаленного (источник)

git fetch origin

Локальный репо

C1---C2---C3---X4---X5---X6 (master)
           \
            C4 (origin/master)

Перебазировать текущую ветвь (мастер) на C4 и оставить X4

git rebase --onto C4 X4

Локальный репо

C1---C2---C3---C4---X5---X6 (master)
                \
                 (origin/master)

Подробнее о перебазировании на

0 голосов
/ 09 января 2020

Интерактивная перебазировка может помочь.

Вы должны быть в состоянии сделать git pull --rebase=i
В интерактивном интерфейсе, чтобы отменить коммит X4, замените «pick» на «drop» или «d».

rebase do c: https://git-scm.com/book/en/v2/Git-Branching-Rebasing

...