1

У меня есть репозиторий, который я унаследовал, он был создан путем загрузки zip-кода из github, который не был клонирован, и почти все изменения были сделаны до первого коммита.

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

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

1 ответ1

1
  1. Сначала временно "привейте" две истории вместе через .git/info/grafts. Это добавляет фальшивых родителей к любому коммиту. Синтаксис:

    commit-id parent-id [parent-id...]
    

    Допустим, ваш самый старый коммит - 1234567890 , и вы думаете, что он основан на коммите abcdefghijkl GitHub. При этом ваш файл .git/info/grafts должен выглядеть так:

    1234567890 abcdefghijkl
    

    Обратите внимание, что вы должны использовать полные 20-символьные идентификаторы фиксации, а не сокращенные.

    (То же самое может быть достигнуто с помощью "замененных объектов" и git replace --graft . Механизм другой, но конечный результат тот же.)

  2. Используйте git log --stat --decorate чтобы убедиться, что вы правильно поняли. Вы должны увидеть «(привитое)» украшение рядом с 1234567890 .

  3. Наконец, запустите git filter-branch abcdefghijkl..HEAD "запечь" трансплантат и сделать его постоянным. После этого журнал должен выглядеть идентично, но маркер (привитый) должен был исчезнуть. Вы также можете удалить .git/info/grafts .

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .