2011-05-11 14 views
23

He bifurcado un proyecto en Github.Evita las confianzas de fusión no deseadas y otras confirmaciones al hacer una solicitud de extracción en GitHub

Deje que el control remoto en sentido ascendente sea upstream y mi repositorio remoto sea origin. Mi rama local master está configurada para rastrear la rama remota master. Luego agregué algunas cosas en el local master, y me fusioné con el upstream de vez en cuando.

No es hasta hoy cuando quiero emitir una solicitud de extracción lo que encontré el problema: la solicitud de extracción consiste en los fusión compromete, y aquellos no deseados comete que hice anteriormente sin cuidado. Sin embargo, lo que quiero es solo enviar el último compromiso que hice, que debería ser retirado como una única confirmación. ¿Qué puedo hacer para rescatar esto?

Respuesta

3

Funcionaría así: Crea una rama separada con solo la confirmación que deseas y publica una solicitud de extracción en esa rama.

+0

Esto es lo que recomendaría. Sin embargo, no tengas miedo de las asignaciones de fusión, si la sucursal contiene solo ese compromiso único que deseas y un montón de fusiones para mantenerlo actualizado con el maestro, no hay nada de malo en eso. – Tekkub

+0

Esto es exactamente lo que estoy preguntando: no sé cómo hacer esto apropiadamente. –

27

En lugar de fusionar, quiere volver a establecer la base. Puede hacerlo de forma manual o automáticamente al tirar.

git pull --rebase upstream master 
git push --force origin master 

Una vez que haya comenzado a hacer fusiones aunque esto obtendrá difícil de hacer, tendrá que restablecer la rama remonta a antes de que hizo una fusión cometió.

+0

+1 Esta es la razón por la que existe la base de rebase :) – ralphtheninja

+0

Parece que funciona. Simplemente no estoy seguro de si tengo que hacer el paso dos, ya que cada vez que me fusiono con el maestro remoto habrá una confirmación de fusión. –

+7

-1 para la solución git push --force que se ofrecerá en el mismo nivel que git push --rebase.El usuario debe ser advertido de las posibles dificultades con la fuerza de empuje, que es potencialmente más dañino, y otros usuarios del repositorio deben saber cómo reaccionar correctamente si se derivaron de una confirmación que fue completamente eliminada por la fuerza de empuje y quieren fusionar de nuevo – prusswan

6

En Github, no puede crear una solicitud de extracción para una única comprobación específica en una sucursal que tiene múltiples comprobaciones que lo separan de la corriente ascendente.

Crea una rama específicamente para cada solicitud de extracción que pretendas realizar. Esto le permite continuar trabajando sin temor a contaminar una solicitud de extracción.

10

Si entiendo tu pregunta, quieres deshacerte de las confirmaciones intermedias/de descarte que hiciste en tu sucursal. Intentar algo como esto:

git checkout -b for-upstream remotes/origin/master (create a new branch from the upstream origin) 
git cherry-pick <sha-of-the-one-commit-you-want-to-submit> (fix any conflicts if necessary) 

esto debe darle un local "para-aguas arriba" rama que contiene sólo el maestro de aguas arriba + 1 su confirmación. A continuación, puede presentar esa rama de solicitud de extracción

+0

Creo que la primera línea debe ser 'git checkout -b ...' y no 'git branch -b ...' (haz ese cambio y voy a votar aquí esta respuesta) – founddrama

0

Esto se ve como una respuesta a su pregunta (sección "Actualización 2011-04-15" del tema):

Git workflow and rebase vs merge questions

Miqueas describe la técnica de squash combina que le permite fusionar los cambios de su rama de características como una única confirmación a la rama principal.

+0

Squash merges destruir el seguimiento de fusión y puede causar un dolor sin fin. –

Cuestiones relacionadas