Восстановите файл .git, пока обновляется локальный репозиторий - PullRequest
0 голосов
/ 31 мая 2018

Год назад я открыл учетную запись Bitbucket и использовал ее для отслеживания версий локальной папки (на моем личном ноутбуке).

С тех пор мой ноутбук "умер", и я купил новую.Мои файлы были заархивированы в мега облаке, поэтому они успешно восстановились.Хотя файл .git не был восстановлен.Теперь я хочу подключить обновленный локальный репозиторий к старому устаревшему репозиторию Bitbucket.

Как я могу это сделать, не удаляя текущие локальные обновления?

Благодарим вас за помощь!

1 Ответ

0 голосов
/ 31 мая 2018

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

Но поскольку вы ссылаетесь на «обновленный локальный репозиторий», я предполагаю, что вы уже предприняли шаги для созданияновое git-репо на локальном пути, независимо от того, что происходило раньше [1].В этом случае у вас предположительно есть что-то вроде этого:

On Bitbucket

A -- B -- C -- D <--(master)


Locally

E -- F <--(master)

Я предполагаю, что первый коммит в вашем новом репо является более новым состоянием каталога, по сравнению с последним коммитом, который был сохранен в BitBucket.

Итак, первое, что нужно сделать, - настроить хранилище bitbucket как удаленное

git remote add origin url://of/remote/repo

, где URL-адрес будет тем же, который вы использовали бы для клонирования.Тогда

git fetch

и у вас есть локально

A -- B -- C -- D <--(origin/master)

E -- F <--(master)

Далее вам нужно re-parent E на D.См. git filter-branch docs (https://git -scm.com / docs / git-filter-branch ), конкретно относящийся к опции --parent-filter.Есть несколько примеров, показывающих различные способы выполнения этой задачи.


[1] Если я неправильно читаю ваше заявление, а вы еще не воссоздали локальный репо, это на самом деле проще, потому что это означаетнет локальной истории, в которую можно привить. В этом случае вы можете сделать что-то вроде

cd /path/of/local/repo
git clone -n url://of/remote/repo old-repo
mv old-repo/.git .
rmdir old-repo

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

...