LINUX.ORG.RU

Git - как одну ветку сделать родителем для другой?


2

2

1) У меня есть git-репозиторий, в который повносили изменения, это получилась ветка master.

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

Какую команду дать, чтобы git начал считать, что ветка с оригинальными исходными кодами является родителем для первой версии в ветке master?

rebase как-то не срабатывает (предалагает вносить изменения последовательно, я не понимаю - зачем)

А с чего у тебя мастер начинается? От пустого коммита что-ли? Там же были какие-то исходники?

nanoolinux ★★★★
()

Я так понимаю, извернуться в git можно по-всякому. В данном конкретном случае я вижу два варианта: с сохранением истории и без сохранения истории изменений. С сохранением истории примерно так:

  • Repo1 считаем что принадлежит разработчику Бобу. И он расположен на его компе. Боб делает в своём мастере новую ветку «develop» для наглядности. Мы принесли целиком его Repo1 и поместили в /tmp/bob.
  • У тебя есть твой Repo2, который ты считаешь мастером. Подключаем удаленный Repo1 к нашему Repo2. Потом забираем к себе удалённые ветки
    git remote add bob /tmp/bob
    git fetch bob
  • Создаём локальную ветку bob_dev
    git checkout -b bob_dev bob/develop
  • Теперь у нас две локальных ветки: «master» и «bob_dev». Можно делать merge и т.д.
justAmoment ★★★★★
()
Последнее исправление: justAmoment (всего исправлений: 1)
Ответ на: комментарий от justAmoment

я наверное так и делал (только через gui, а не с командной строки)

merge-то я сделал. Проблема в том, что у меня две начальных ревизии, которые потом мержатся в одну.

А на самом деле все две начальные ревизии - это по сути один и тот же код (один - совсем не модифицированный, другой - модификация первого).

StrongDollar
() автор топика
Ответ на: комментарий от StrongDollar

Тогда напиши подробнее в каждом repo «git branch; git remote -v». Какую на какую ветку наложил и почему тебе это не понравилось.

justAmoment ★★★★★
()
Ответ на: комментарий от StrongDollar

И да, gui — конечно, великолепное и очень удобное решение, только когда точно знаешь, что в нём происходит.

justAmoment ★★★★★
()
Ответ на: комментарий от StrongDollar

Потому что ветки независимые. А хочется чтобы росли из одного корня

Т.е., у тебя есть две локальных параллельных ветки. И у них нет ни одного общего коммита в истории? Или 1,2,3 и т.д. коммиты от начала имеют одинаковые названия и одинаковые хэши, но там, где ты смотришь историю, она не отображена как общая?

justAmoment ★★★★★
()
Ответ на: комментарий от justAmoment

у тебя есть две локальных параллельных ветки.

да, у меня две локальных ветки

И у них нет ни одного общего коммита в истории?

нет и не было

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

StrongDollar
() автор топика
Ответ на: комментарий от StrongDollar

Вообще, эта задача гуглится по «git rewrite history». Только, увы, я не нашёл статьи с красивыми картинками демонстрирующими трансформацию графа коммитов.

true_admin ★★★★★
()

пробовал git rebase --no-ff ?
оно вроде как пересоздаст историю с новыми хэшами

q11q11 ★★★★★
()
Последнее исправление: q11q11 (всего исправлений: 2)
Ответ на: комментарий от justAmoment

откладыванием проблемы в связи с появлением новых

StrongDollar
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.