Перекомпоновка управляемого проекта .git с двух компьютеров - PullRequest
0 голосов
/ 06 ноября 2019

Я немного испортил ...

Я перенес проект Android Studio, управляемый git, с одного ПК на другой (через сетевое резервное копирование) и продолжил разработку на новой машине. К сожалению, папка .git не была включена в миграцию.

Я не думал, что смогу вернуть старую папку .git (старая машина не загрузится, а папка .git не будетвключен в сетевое резервное копирование), поэтому я создал новый репозиторий в проекте на новой машине, и там все хорошо.

Теперь мне удалось получить старую папку .git, в которой есть все мои старыекоммиты в нем, но я уже создал различные новые ветки и коммиты на новой машине! Дох!

Я хотел бы получить полную историю на новой машине, объединив два репозитория.

Если я скопирую старую папку .git на новую машину и положу ее рядомновая папка .git, но как .git.old есть способ объединить две папки, чтобы объединить всю ветку и историю коммитов в .git?

Я прочитал различные руководства о том, как объединитьпроекты и т. д. путем слияния репозиториев, но я обеспокоен тем, что слияние двух репозиториев для одного и того же проекта (хотя и последовательное по времени, а не перекрывающееся) может привести к такому количеству конфликтов, что слияние становится бесполезным.

1 Ответ

2 голосов
/ 06 ноября 2019

Я предлагаю вам создать новую папку old (или как вы хотите ее назвать) и скопировать в нее папку .git вашего старого проекта. Если вы хотите, вы можете запустить git checkout master, чтобы проверить рабочее дерево и просмотреть его файлы. Вам также может потребоваться запустить git reset --hard HEAD.

Теперь у вас есть два репозитория: old с вашей исходной историей Git и restored, которые вы восстановили из сетевой резервной копии и продолжили разработку. Вы можете добавить old в качестве удаленного к restored, выполнив следующую команду из restored:

git remote add old /path/to/old
git fetch old

Теперь вы увидите все ветви из old в своем хранилище. Затем вы можете переместить свою новую историю поверх старой истории с помощью git rebase:

git checkout master
git rebase old/master

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

После того, как вы перебазируете master, вы также можете перебазировать другие ваши ветви:

git checkout branchName
git rebase master
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...