Ответ 1
Если я правильно понимаю, у вас есть единственный (локальный) репозиторий, который выглядит примерно так:
A/master
↓
* -- * -- * -- a
\
* -- * -- b
↑
B/mybranch
Теперь обновляется A
, поэтому он выглядит так:
A/master
↓
* -- * -- * -- a -- * -- * -- a+
\
* -- * -- b
↑
B/mybranch
Обратите внимание, что у вас есть две расходящиеся ветки, которые не имеют прямой линии. Так что вы говорите, что получите a+ b a
, когда вы объедините A
на B
, неверно. Вы получаете слияние, но это сохраняет историю как есть:
A/master
↓
* -- * -- * -- a -- * -- * -- a+
\ \
* -- * -- b --- M
↑
B/mybranch
Как вы можете видеть, у вас все еще есть информация, откуда взялись коммиты: те, что были между A
и a+
, поступали из одной ветки, а другие между A
и B
поступали от другой. И M
объединяет те ветки tro. Обычно это как раз правильный способ решить эту проблему.
Преимущество этого в том, что вы перегружаете, как вы заметили, - это то, что фиксации остаются такими, какие они есть. Все пользователи, которые взаимодействовали с любым репозиторием, могут просто без проблем перетащить эти изменения. Если вы переупасете какие-либо из этих коммитов, им придется вручную исправить это (скорее всего, они даже не осознают этого, поэтому они просто потянут и фактически создадут даже более грязную историю с дублирующими фиксациями).
Таким образом, слияние, безусловно, лучше работать здесь. Да, история не будет выглядеть такой же совершенной, как прямая линия, но она правильно передает то, что произошло: существует разрозненная линия разработки, которая является независимой и затем была обновлена с изменениями из восходящего репозитория A
. Эта информация может быть полезна и, как таковая, имеет смысл удержать их. И особенно если у вас есть пользователи, взаимодействующие с обоими пультами, они определенно предпочтут поддерживать совместимость своего репозитория с обоими пультами.
Если вы не хотите, чтобы история выглядела так и не заботилась о совместимости с A
, вы также могли бы скворовать все изменения с A
на ваш B
:
A/master
↓
* -- * -- * -- a -- * -- * -- a+
\
* -- * -- b -- [A]
↑
B/mybranch
Здесь [A]
- сжатый коммит, содержащий все изменения между A
и a+
в одном коммите. Вы можете получить этот результат, перезарядив A
на B
, в то время как раздавить все коммиты. В этом случае вы должны четко указать, где эти изменения происходят из сообщения фиксации.