Cómo confirmar cambios en una nueva sucursal

151

Acabo de hacer cambios en una rama. ¿Cómo puedo confirmar los cambios en la otra rama?

Estoy tratando de usar:

git checkout "the commmit to the changed branch" -b "the other branch"

Sin embargo, no creo que sea lo correcto, porque en este caso estoy creando una nueva rama en lugar de confirmar los cambios en "la otra rama".

¿Debo usar el siguiente comando en su lugar?

git merge "the other branch"
usuario1988385
fuente
¿Solo un commit o varios?
Carl Norum

Respuestas:

267

git checkout -b your-new-branch

git add <files>

git commit -m <message>

Primero, revisa tu nueva sucursal. Luego, agregue todos los archivos que desea comprometer para la preparación. Por último, confirme todos los archivos que acaba de agregar. Es posible que desee hacer un git push origin your-new-branchdespués para que sus cambios se muestren en el control remoto.

John Brodie
fuente
1
desde que obtuve la nueva rama de git checkout v3.0 (la rama antes de realizar los cambios) nueva-rama, ¿todavía necesito usar "git add <files>"?
user1988385
Puede hacer una git statuspara ver lo que está actualmente en escena y lo que no.
John Brodie
55
¿Por qué ambos git addy git commit -a?
Carl Norum
11
No es en git checkout -b your-new-branchlugar de git checkout your-new-branch?
Schrodinger's'Cat
1
¿Qué tal si ya rastreé un archivo y quiero cambiar a una nueva rama para agregar esos archivos a la rama recién creada?
Culo rey alguna pregunta
57

Si no has cometido cambios

Si sus cambios son compatibles con la otra rama

Este es el caso de la pregunta porque el OP quiere comprometerse con una nueva rama y también se aplica si sus cambios son compatibles con la rama de destino sin activar una sobrescritura.

Como en la respuesta aceptada por John Brodie, simplemente puede verificar la nueva sucursal y comprometer el trabajo:

git checkout -b branch_name
git add <files>
git commit -m "message"

Si sus cambios son incompatibles con la otra rama

Si obtiene el error:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

Luego puede esconder su trabajo, crear una nueva rama, luego hacer estallar sus cambios de escondite y resolver los conflictos:

git stash
git checkout -b branch_name
git stash pop

Será como si hubiera realizado esos cambios después de crear la nueva rama. Entonces puedes cometer como de costumbre:

git add <files>
git commit -m "message"

Si ha cometido cambios

Si desea mantener las confirmaciones en la rama original

Vea la respuesta de Carl Norum con cherry-picking, que es la herramienta correcta en este caso:

git checkout <target name>
git cherry-pick <original branch>

Si no desea mantener las confirmaciones en la rama original

Vea la respuesta de joeytwiddle sobre este posible duplicado . Siga cualquiera de los pasos anteriores según corresponda, luego retroceda la rama original:

git branch -f <original branch> <earlier commit id>

Si ha empujado sus cambios a un control remoto compartido como GitHub, no debe intentar esta reversión a menos que sepa lo que está haciendo.

miguelmorin
fuente
3
Todos deberían probar este código. Debido a que la mayoría de las personas que buscan la respuesta, ya han tenido algunos cambios en su código existente.
Sushin Pv
2
¿Por qué agregaste el stash y el stash pop? Cuando finalice la compra de una nueva sucursal, sus cambios estarán disponibles para agregar y confirmar, sin necesidad de guardarlos.
Tristan
@Tristan Tiene razón en el caso en que los cambios son compatibles y los archivos no se sobrescriben. De lo contrario, obtengo error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.¿Desea escribir una nueva respuesta o editar mi respuesta? Si no, puedo editarlo yo mismo.
miguelmorin
Ok, tienes toda la razón. Sin embargo, creo que debe completar su respuesta para mostrar lo que aporta además de la respuesta aceptada.
Tristan
@ Tristán lo hice. El OP preguntaba por una nueva sucursal, en cuyo caso la respuesta aceptada es la correcta. Mantengo la mía ya que otras personas encontraron útil mi respuesta. Se ha convertido en una respuesta larga y estoy feliz de editar con cualquier comentario.
miguelmorin
24

Si entiendo bien, ¿se ha comprometido changed_branchy desea copiar ese compromiso other_branch? Fácil:

git checkout other_branch
git cherry-pick changed_branch
Carl Norum
fuente
55
Esta es la respuesta correcta para lo que está tratando de lograr.
Sean