Я пытаюсь изучить git, применяя его (задним числом) к проекту, где я некоторое время отслеживал удаленную кодовую базу.
Когда я помещал все в git, я просто создал ветку remote
для всех внешних версий и поместил свои версии в master
, поэтому в настоящее время мой репозиторий выглядит так:
master: A0---A1.0--A1.1--A2.0--A2.1-....
\
remote: B1----------B2-----------....
Мой вопрос: как мне задним числом сообщить git о произошедших слияниях, чтобы хранилище выглядело так (код не должен быть изменен):
master: A0---A1.0--A1.1--A2.0--A2.1-....
\ / /
remote: B1----------B2-----------....
Стандартный git Disclaimer: вышеуказанные действия не повлияют на опубликованную историю :)
РЕДАКТИРОВАТЬ: Ниже, как я сделал это с использованием трансплантатов, как это было предложено Кевином:
Сначала я вручную создал .git / info / grafts следующим образом (все записи - sha1):
A1.0 A0 B1
A2.0 A1.1 B2
Затем, проверив, что все выглядит хорошо (gitx), я запустил git filter-branch
без аргументов.
Filter-branch
сделает трансплантаты постоянными и сохранит ссылки на исходные коммиты в refs/originals/...
, чтобы вы могли вернуться через git reset --hard refs/originals/refs/heads/master
. Поскольку все выглядело хорошо, я удалил все остатки следующим образом:
rm .git/info/grafts
rm .git/refs/originals
Если вы собрали мусор, вам нужно вместо этого сделать git update-ref -d refs/originals/refs/heads/master
.