ПРИМЕЧАНИЕ. Точка сшивания содержит те же изменения, никаких конфликтов не происходит.
Итак, я думаю, вы должны использовать git replace .
Скорее всего, команда:
git replace --graft <commit> [<parent>…]
Если я правильно понимаю, вы хотите связать первый синий коммит с последним оранжевым, который является коммитом, который содержит точно такой же контент.
Команда немного сложнее, потому что последний оранжевый коммит является коммитом слияния, поэтому вы должны использовать sha1 из двух родителей в командной строке (от второго до последнего апельсина и последний зеленый).
Итак, команда должна быть:
git replace --graft <Sha1_of_first_blue_commit> <Sha1_of_second_to_last_orange_commit> <Sha1_of_last_green_commit>
Когда закончите, проверьте историю.
Если вас это не устраивает, удалите замененный коммит.
Если это вас устраивает, то вы должны использовать git filter-branch , чтобы сделать его постоянным (с git filter-branch -- --all
), переписав всю историю после замены коммита.
Из документа:
ПРИМЕЧАНИЕ. Эта команда учитывает файл .git / info / grafts и ссылается на пространство имен refs / replace /. Если у вас есть какие-либо трансплантаты или заменяющие ссылки, выполнение этой команды сделает их постоянными.
Он изменит историю синего и последующих коммитов, поэтому, чтобы его подтолкнуть, вы должны будете сделать git push --force-with-lease
для всех обновленных ссылок.
PS: Существует также возможность протолкнуть замененный объект (решение здесь ), но это не рекомендуемое решение.