6

У меня есть два коммита, основанные на некотором родителе: P -> A -> B

Я бы хотел, чтобы они основывались на другом родителе: P '-> A' -> B '

РЕДАКТИРОВАТЬ: Моя ситуация такова, что я работаю с другими членами команды. У нас есть центральное хранилище Git. В моей конфигурации 'git pull' делает перебаз, в то время как для остальных он создает слияние. Время от времени, когда я выпускаю 'git pull', git начинает перебазировать коммиты, которые я не делал, и мне нужно разрешать конфликты для кода, который я не писал. Это долго и подвержено ошибкам.

Я предполагаю, что причина в том, что происходит нечто подобное:

        /--A--B---- // my repository
       /
--C1--C2--------M-  // the remote
   \   M       /
    \-D-M'-E--/     // another developer

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

1 ответ1

13

Давайте примем это как ситуацию:

        A---B (topic1)
       /
...---P---C---D (topic2)

Если ваша текущая ветка 'topic1', вы можете переместить коммиты A и B в ветку git rebase topic2 topic1(или просто git rebase topic2). Тогда график репо будет выглядеть

                A'--B' (topic1)
               /
...---P---C---D (topic2)

где commit D - это то, что вы считаете P '. Обратите внимание, что новый родительский коммит не нужно менять.

Или, в более общем случае, если вам нужно переместить некоторые коммиты в качестве потомков любого коммита (не обязательно главы ветки), вы можете использовать параметр --onto :

         A---B (topic1)
        /
...Q---P---C---D (topic2)

git rebase --onto topic2~3 topic1~2 topic1 или git rebase --onto Q P topic1 где Q и P - это SHA1 коммитов.

     A'--B' (topic1)
    /
...Q---P---C---D (topic2)

Если это не то, что вы намеревались, не могли бы вы объяснить ситуацию немного подробнее?

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