#git
#git
Вопрос:
У меня есть два репозитория repo1 и repo2, где repo2 в какой-то момент был клонирован из repo1. Теперь мне нужно заменить главную ветвь из repo2 на главную ветвь из repo1. Я хочу сохранить историю в repo2 нетронутой и просто добавить все, что есть в главной ветке repo1, в качестве коммита в repo2.
Итак, это будет что-то вроде этого:
Repo2
D------E-----F (branch to keep)
/
init----A----B----C------G-----Head(h2) (master)
Repo1
init----A----B-....-Z-----Head(h1) (master)
Чего я хочу
D------E-----F (branch to keep)
/
init----A----B----C------G-----h2----HEAD(h1) (master)
после этой операции основная ветвь в обоих репозиториях должна быть идентичной.
Это правильный способ сделать это? (Я не могу рисковать, сначала попробовав, а потом поняв, что это неправильно !!)
- git clone repo2.git repo2 amp;amp; cd $_
- git remote добавляет исходящее repo1.git
- git fetch upstream
- git перебазирует upstream / master
- git нажимает origin master —force
Ответ №1:
Во-первых, даже если вы покажете «h1» в обоих репозиториях, когда закончите, поймите, что идентификаторы фиксации будут разными…
Я чувствую, что самый простой способ выполнить то, о чем вы просите, — это проверить master в обоих репозиториях, а затем просто скопировать файлы из repo1 в repo2. Затем передайте его в master на repo2.
С учетом сказанного, это кажется странным поступком. Интересно, почему вы хотите сохранить историю master в repo2, если вы хотите, чтобы файловая система фактически не отражала ни одно из этих изменений? Как только вы «заменяете» master в repo2 на master из repo1, вы отменяете любые изменения, для которых вы хотите отслеживать историю. Кроме того, с разными идентификаторами для одних и тех же файлов ваши репозитории всегда будут не синхронизированы. Интересно, было бы лучше просто отменить изменения на master, затем объединить обратно в master, а затем синхронизировать два репозитория с фиксацией слияния на месте. Таким образом, ваша история по-прежнему сохраняется, и оба репозитория одинаковы, на случай, если вы захотите сделать это снова в будущем.
Комментарии:
1. Это правда, что SHA наверняка будут отличаться, я просто хотел визуально указать, что они в основном представляют собой один и тот же снимок. Что касается истории, я думаю, что что-нибудь еще сделало бы возврат к истории более сложным. Таким образом, у меня есть история обоих репозиториев (repo1, который станет неактивным, и repo2). И копирование / вставка изменений и простая фиксация их на самом деле не кажутся такими уж плохими ( 1) (Это репозиторий Terraform, поэтому файлов не так много). Не уверен, что это лучший способ.
2. @mok ОК. Поскольку вам нужны файлы из repo1, кажется, что имело бы смысл сохранить историю коммитов, из-за которых вы туда попали, но, похоже, вы хотите выбросить эту историю и вместо этого сохранить историю repo2, хотя вы, по сути, отменяете эти изменения. 🙂
3. Я понимаю, что вы говорите об истории, и согласен с этим, но я не уверен, что удаление истории для master не повлияет на другую ветку, которую я должен сохранить (включая ее историю) в repo2. Вот почему я не хочу с этим возиться.