git rebase una twig desde que fue creada

en el momento de volver a basar una twig (por ejemplo, una twig de características antes de fusionarse en el maestro) tengo que search manualmente cuando se creó la twig para decirle a git rebase el punto de inicio para la rebase. Tengo la fuerte sensación de que esto puede automatizarse: ¿hay alguna manera de decirle a git rebase que comience cuando se creó la twig?

Suponiendo que está trabajando en la feature/foo twig feature/foo que se basa en la twig master .

  F--J--K--|feature/baz| / A--B--D--G--|master| \ C--E--H--|feature/foo|HEAD| 

Para rebase a rebase la rebase del trabajo en el master existen diferentes opciones:

  1. Como lo explica remram , puede nombrar explícitamente el compromiso de destino usando el --onto :

     // 1.1. Will move the flag `feature/foo` git rebase --onto master B feature/foo // 1.2. Will not move the flag `feature/foo` git rebase --onto master BH // 1.3. If the HEAD is at H git rebase --onto master B 

    Como el --onto permite definir la confirmación del objective, es útil si desea volver a establecer la feature/foo en feature/baz que no comparten una base de bifurcación común.

     // 1.4. Will rebase `feature/foo` onto `feature/baz` git rebase --onto feature/baz B feature/foo /--|feature/baz| / F--J--K--C'--E'--H'--|feature/foo|HEAD| / A--B--D--G--|master| 
  2. Como explicó Stefan Fleiter , no tiene que nombrar al antecesor si feature/foo se basa en el master :

     // 2.1. Explicitly naming feature/foo as the branch to be rebased onto master git rebase master feature/foo // 2.2. Assuming that feature/foo is currently checked out aka. HEAD git checkout feature/foo git rebase master 
  3. Si no se siente cómodo con el process de rebase , ya que su feature/foo sucursal anterior "desaparece" cherry-pick podría ser una alternativa para sentirse bien. El command permite especificar un range de confirmaciones y se comporta de forma muy similar a rebase --onto . La diferencia es que la twig de la que usted elige no se tocará.

     // 3.1.1. Start by creating a new branch where master is git checkout master git checkout -b feature/foo-cherried F--J--K--|feature/baz| / A--B--D--G \ \ \ \-|master|feature/foo-cherried|HEAD| \ C--E--H--|feature/foo| // 3.1.2. Pick a range starting at the common branch base git cherry-pick B..H F--J--K--|feature/baz| / A--B--D--G--C'--E'--H'--|feature/foo-cherried|HEAD| \ \ \ \-|master| \ C--E--H--|feature/foo| // 3.1.3. Later on if everything worked fine you can // delete the unmerged branch feature/foo git branch -D feature/foo F--J--K--|feature/baz| / A--B--D--G--C'--E'--H'--|feature/foo-cherried|HEAD| \ \-|master| 

Para get más información sobre git rebase --onto , recomiendo una publicación de blog aquí:

  • Git: ¿Cómo copyr un range de commits de una twig a otra?

La syntax de la rebase completa es git rebase --onto target starting-point mybranch . Si se omite mybranch se mybranch el actual.

En la mayoría de los casos, puedes hacer git rebase target . En este caso, se utilizará el último ancestro común de la twig actual ( mybranch ) y el target (ver combinación-base ). Entonces, si está networkingefiniendo una twig de function en la twig en la que se basa, esta última forma debería funcionar.

Ver también la página en rebase del libro de Git .

Al volver a establecer una twig de function con git, no es necesario conocer al antecesor común. Simplemente cambie a su twig de características

  git checkout my-feature-branch 

rebase para dominar o alguna otra twig que te guste

  git rebase master 

volver a dominar

  git checkout master 

y (avance rápido) fusionan la twig de características para establecer HEAD en la twig principal a la última confirmación rebasada.

  git merge my-feature-branch 

Para get más detalles, eche un vistazo a la explicación detallada en el libro de Pro Git. Espero que esto responda tu pregunta.