git ошибка новичка - как восстановить

Возможно, связано с Git - вытягивание изменений из клона обратно в мастер< /а>

Я работал над проектом ASP.NET, когда обнаружил, что мне нужно внести «экспериментальный» набор изменений, которые могли потребоваться или не потребоваться в производственной версии.

Очевидной вещью было создание ветки.

Однако, поскольку я был знаком с darcs и svn, но не с git, я предположил, что клон был «нормальным» способом создания ветки (теперь я знаю, что git branch был бы более подходящим).

Я продолжал работать над экспериментальным изменением в клоне и одновременно другими изменениями в оригинальном репозитории.

С тех пор я обнаружил, что экспериментальные изменения желательны в производственной версии, и хотел бы объединить два набора изменений.

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

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

Верхний репозиторий в то время не использовал VCS — это был просто каталог, полный zip-файлов с номерами версий, добавленными к именам файлов.

Итак, я хотел бы знать:

  • Какой самый простой способ объединить наборы изменений в репозиториях? (Я не ожидаю серьезных конфликтов.)
  • Насколько вредно клонировать вместо ветвления? Я потерял какую-либо информацию, сделав это, например. общая история, общие зависимости?

person finnw    schedule 09.05.2009    source источник


Ответы (3)


В исходном «неразветвленном» репозитории git выполните следующие команды:

git remote add name_it_anything /path/to/the/other/git/repository
git fetch name_it_anything
git merge name_it_anything/master

Это объединит все изменения в nname_it_anything. Если вам нужны не все из них, а только некоторые из коммитов, вы можете git log name_it_anything/master просмотреть список коммитов, а затем git cherry-pick [SHA] для каждого из коммитов, которые вы хотите объединить.

person August Lilleaas    schedule 09.05.2009

По второй части вашего вопроса:

Насколько вредно клонировать вместо ветвления? Я потерял какую-либо информацию, сделав это, например. общая история, общие зависимости?

Git — это распределенная система контроля версий. Вся суть DVCS заключается в том, чтобы иметь возможность объединять изменения между разными репозиториями.

person Jörg W Mittag    schedule 09.05.2009
comment
Да, но сохраняет ли он всю информацию о различиях между репозиториями, как и о различиях между ветвями? Или существует больший риск того, что он не сможет разрешить конфликты? - person finnw; 09.05.2009
comment
он будет импортировать коммиты из другого репозитория, так что да, у него будет правильная информация. как сказал Йорг, git был специально создан для этого. Люди постоянно клонируют и объединяют, см., например, github.com. - person Maximiliano Guzman; 10.05.2009

Думаю можно git-format-patch в одном репозитории, а потом применить в другом. Таким образом сохраняется вся важная информация.

person Paweł Hajdan    schedule 09.05.2009