Задать вопрос
  • Как собрать коммиты из 2-х разных локальных репозиториев в последовательную историю?

    @andmerk93 Автор вопроса
    Ответ ниже от Сергей Кузнецов, я его немного исправил.

    Коммиты в гите неизменяемы. Если изначально родителя не было, то вы не прицепите его постфактум. Но вы можете пересадить ветку second на вершину master, пересобрав коммиты заново.

    Чтобы получить что вам хочется, следует действовать иначе:
    git fetch second  # скачать все коммиты из второго репо
    git switch second # перейти в ветку second
    git rebase master --committer-date-is-author-date 
    # пересобрать ветку second с вершины ветки master
    # с заменой даты создания коммита
    # для удобного отображения в редакторах
      dropping 0f6a3f0 third, "two" -- patch contents already upstream
      Successfully rebased and updated refs/heads/second.
    git switch master         # вернуться в master
    git merge second --no-ff  # влить second в master


    Получим:
    git log --oneline --graph
    *   13dddb5 (HEAD -> master) Merge branch 'second'
    |\
    | * 515f80e (second) fourth, "three"
    |/
    * d5c58d8 second, "two"
    * fcc376b first, "one"


    Коммит third, "two" исчез из истории (дропнут) во время rebase, так как он полностью повторяет состояние second, "two"

    Но если вам надо действительно последовательную историю, то не надо создавать коммит слияния. Не используйте ключ --no-ff в последней команде. Это просто установит указатель master на вершину.
    И получится линейная история
    git log --oneline --graph
    * 515f80e (HEAD -> master, second) fourth, "three"
    * d5c58d8 second, "two"
    * fcc376b first, "one"
    Ответ написан
    Комментировать