Tenho a seguinte topologia de repositório Git:
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
Com o rebase do feature
branch, eu esperava rebase a subárvore inteira (incluindo os branches filhos):
$ git rebase feature master
A-B-F (master)
\ D (feature-a)
\ /
C (feature)
\
E (feature-b)
No entanto, este é o resultado real:
C' (feature)
/
A-B-F (master)
\ D (feature-a)
\ /
C
\
E (feature-b)
Eu sei que posso facilmente consertar manualmente executando:
$ git rebase --onto feature C feature-a
$ git rebase --onto feature C feature-b
Mas existe uma maneira de rebasear automaticamente o branch incluindo todos os seus filhos / descendentes?
git
version-control
branch
rebase
git-rebase
Tomasz Nurkiewicz
fonte
fonte
$ git rebase feature master
ser$ git rebase master feature
?Respostas:
fonte
--onto F
vez de--onto B
, já que todos esses commits estão prontos para B e nós os movemos para F ?Alguns anos atrás, escrevi algo para lidar com esse tipo de coisa. (Comentários para melhorias são bem-vindos, claro, mas não julgue muito - foi há muito tempo! Eu nem conhecia o Perl ainda!)
Ele se destina a situações mais estáticas - você o configura definindo os parâmetros de configuração do formulário
branch.<branch>.autorebaseparent
. Ele não tocará em nenhum branch que não tenha esse parâmetro de configuração definido. Se não for isso que você deseja, provavelmente poderá hackear para onde quiser sem muitos problemas. Na verdade, não o usei muito nos últimos dois anos, mas quando o usei, sempre me pareceu bastante seguro e estável, na medida em que isso fosse possível com rebasing automatizado em massa.Então aqui está. Use-o salvando-o em um arquivo chamado
git-auto-rebase
em seuPATH
. Provavelmente também é uma boa ideia usar a opção dry run (-n
) antes de tentar de verdade. Pode ser um pouco mais detalhado do que você realmente deseja, mas mostrará o que tentará realocar e sobre o quê. Pode te poupar alguma dor.Uma coisa que descobri, desde que originalmente abordei isso, é que às vezes a resposta é que você realmente não queria rebase! Há algo a ser dito sobre iniciar ramos de tópicos no ancestral comum correto em primeiro lugar, e não tentar movê-los adiante depois disso. Mas isso é entre você e seu fluxo de trabalho.
fonte
Se for necessário atualizar uma data de committer , a
GIT_COMMITTER_DATE
variável de ambiente pode ser usada ( manual ). Use também a--format
opção de obter um nome de ramificação sem formatação adicional.NB: que é necessário para definir qualquer um
--committer-date-is-author-date
ouGIT_COMMITTER_DATE
para garantir a mesma soma de verificação paraC'
,Ca'
eCb'
concretiza (em rebasing característica , característica-um e funcionalidade-b correspondentemente).fonte