4

Empecé hace relativamente poco a usar Git y tengo la mala costumbre de empezar a programar sin antes crear una nueva rama. O sea, modifico el código directamente des de la rama master.

¿Se pueden mover los cambios realizados en una rama a otra y así dejar la rama master limpia?

fedorqui
  • 15,850
  • 17
  • 58
  • 112
gmarsi
  • 1,402
  • 4
  • 24
  • 46

2 Answers2

14

Sí, es posible.

Si aún no has hecho ningún commit

Ahora mismo estás en master. Si escribes git status verás una lista con los ficheros que han sido modificados pero no commiteados.

Simplemente crea la rama:

git checkout -b nueva_rama

Este comando la crea y automáticamente te lleva a ella, llevándose consigo todos esos cambios.
Efectivamente, si haces git status otra vez verás que esos cambios aparecen allí, por lo que al hacer un commit se incorporarán a esa rama nueva_rama, no a master.

Si ya has hecho algún commit

En este caso, primero habrá que deshacerlo. Tal y como se lee en ¿Cómo puedo deshacer el último commit en Git?, usa:

git reset HEAD~1

o más veces si hay más commits. A partir de ese momento git status volverá a mostrar esos cambios en estado "no commiteado".

Entonces estamos otra vez en el punto anterior Si aún no has hecho ningún commit, así que sigue esos pasos.

Deberás tener también en cuenta que en master tendrás unos cuantos commits que deshacer. Por tanto, deberás volver al estado previo haciendo git checkout <número del último commit válido>.

fedorqui
  • 15,850
  • 17
  • 58
  • 112
3

Si has tirado unos cuantos commits en master lo que tienes que hacer es simplemente crear la rama con git checkout -b nueva_rama como lo dicen las demas respuestas, si tienes algun cambio sin commitear lo commiteas o lo stasheas, despues vuelves para tu rama master con git checkout master, buscan con git log cual es el commit al que la rama master debe estar, y cambias a master con git reset --hard commit_hash. Te deberia quedar tu nuevo branch con los commits que querias y tu rama master detras de esta sin los commits.

Si no has tirado ningun commits solo tienes que crear la rama y commitear tus cambios

Si la rama ya existia puedes hacer un git rebase https://git-scm.com/docs/git-rebase y despues pararte en master y hacer un git reset --hard como en el primer ejemplo

Daniel Pérez
  • 1,123
  • 7
  • 18