Как сказать git, что два коммита одинаковы?
В настоящее время у меня есть две ветви, назовите это A и B:
B1-...many dirty checkouts...-B2
/
--O-A1-A2-......................-A3
В настоящее время B2 и A3 одинаковы (git diff A B
дает пустой вывод).
Теперь проблема в том, что это состояние было достигнуто частичными проверками от AIe много раз git checkout -- dir1 dir2
... случилось и не git merge
,
Простое слияние B с A полностью разрушает A, что невозможно.
Я не хочу терять историю Б.
Как-то я должен сказать Git, что git merge A
на ветке Б ничего делать не надо.
Конечно, я мог бы просто заменить B2 на A3, но в этом случае я бы потерял историю B.
Это как-то возможно?
2 ответа
Здесь может помочь другая стратегия в git merge
через -s
вариант, как ours
:
ours
This resolves any number of heads, but the resulting tree of the
merge is always that of the current branch head, effectively
ignoring all changes from all other branches. It is meant to be
used to supersede old development history of side branches. Note
that this is different from the -Xours option to the recursive
merge strategy.
Звучит так, как будто это может просто взять данную ветку, на которой вы находитесь, как есть, и создать коммит с дополнительными главами в качестве дополнительных родителей; то есть то, что, кажется, вы пытаетесь сделать.
Я нашел решение:
Я проверяю B с
git checkout B
,Я сливаю А в В с
git merge A
, Сейчас B локально в дерьмовом состоянии.Но теперь я делаю проверку каталога с
git checkout remotes/origin/B -- .
, Это восстанавливает B в желаемое состояние.Сейчас подталкиваю B (
git push --all
) обновит стрелки слияния по мере необходимости.