Возможно, вы захотите посмотреть на мерзавцы. Некоторая информация доступна здесь: http://git -scm.com / docs / git-filter-branch
По сути, вы хотите подделать родословную.
Вы сделали первоначальный коммит на обеих машинах - давайте назовем их «baseA» и «baseB». Затем вы создали второй коммит поверх этого с обеих сторон - 'secondA' и 'secondB'. Что вы хотите сделать, это сказать git, что «secondB» не имеет «baseB» в качестве предка, а вместо этого «baseA» в качестве родителя.
Это можно сделать с помощью трансплантатов. Например, поместите это в ваш файл .git / info / grafts:
secondB baseA
(но затем с использованием настоящих SHA). Теперь, если вы посмотрите в GitX, вы увидите, что истории связаны. Чтобы сделать изменение постоянным, вам нужно запустить git filter-branch.
Обновление из комментариев
Я не уверен, что вы сделали «правильно», хотя это сработает. Если вы делаете то, что
вы сделали, вы получите как история:
BaseA --- SecondA -- .. - .. - Merge
\ BaseB --- SecondB ... - .. /
Который будет работать (и слияние пройдет без проблем). Тем не менее, что
немного лучше это:
BaseA --- SecondA -- .. - .. - Merge
\ SecondB ... - .. /
, который в основном отбрасывает «BaseA» в качестве коммита и устанавливает «BaseA» в качестве родителя для
SecondB. Это должно быть возможно с использованием правила взяточничества, которое я вам сказал.
Чтобы продемонстрировать это, я создал небольшой репозиторий, который вы можете скачать здесь .
Если вы посмотрите историю в GitX ("gitx master second_master"), вы увидите
увидеть, что истории отключены. Если вы переместите файл .git / info / _grafts в .git / info / grafts, вы получите вторую красивую историю.
Я также добавил файл .git / info / error_grafts. Если вы воспользуетесь этим, вы получите созданную вами историю.
Если вы посмотрите на файлы SHA в файле трансплантатов, то увидите, что файл _grafts в основном имеет следующее:
SecondB BaseA
и файл неправильный_графов имеет это:
BaseB BaseA