git reescreve commit parent?

5

Eu tenho dois commits baseados em algum pai: P - > A - > B

Eu gostaria que eles fossem baseados em outro pai: P '- > Um '- > B '

EDITAR: Minha situação é que estou trabalhando com outros membros da equipe. Nós temos um repositório git central. Na minha configuração, 'git pull' é rebase, enquanto que para os outros cria uma mesclagem. De vez em quando, quando eu emito 'git pull', o git começa a rebasing de commits que eu não fiz e eu preciso resolver conflitos de código que eu não escrevi. Isso é longo e propenso a erros.

Eu assumo que a razão é que algo semelhante a isso acontece:

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

Assim, um desenvolvedor mescla o C2 e, em seguida, envia suas alterações, o que faz o git pensar que alguns commits são novos (apenas minha suposição). O que eu acabo tendo que rebase outras pessoas comete.

    
por IttayD 17.06.2010 / 10:27

1 resposta

12

Vamos supor que isso seja a situação:

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

Se a sua ramificação atual for 'topic1', você poderá mover as confirmações A e B para a ramificação topic2 emitindo git rebase topic2 topic1 (ou apenas git rebase topic2 ). Então o gráfico de reporte seria parecido com

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

onde commit D é o que você considerou como P '. Note que o novo commit pai não precisa ser alterado.

Ou, mais geralmente, se você precisar mover alguns commits como descendentes de qualquer commit (não necessariamente o head of branch), você pode usar o parâmetro --onto :

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

git rebase --onto topic2~3 topic1~2 topic1 ou git rebase --onto Q P topic1 onde Q e P são commits 'SHA1s.

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

Se não fosse o que você pretendia, gostaria de explicar um pouco mais sua situação?

    
por 17.06.2010 / 13:12

Tags