Как сказать 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.

Звучит так, как будто это может просто взять данную ветку, на которой вы находитесь, как есть, и создать коммит с дополнительными главами в качестве дополнительных родителей; то есть то, что, кажется, вы пытаетесь сделать.

Я нашел решение:

  1. Я проверяю B с git checkout B,

  2. Я сливаю А в В с git merge A, Сейчас B локально в дерьмовом состоянии.

  3. Но теперь я делаю проверку каталога с git checkout remotes/origin/B -- ., Это восстанавливает B в желаемое состояние.

  4. Сейчас подталкиваю B (git push --all) обновит стрелки слияния по мере необходимости.

Другие вопросы по тегам