2011-08-03 26 views
201

Estaba trabajando en la rama principal, hice algunos cambios y luego los escondí. Ahora, mi maestro está en HEAD.git stash cambios se aplican a la nueva sucursal?

Pero ahora, quiero recuperar estos cambios, pero a una nueva rama que se bifurca desde la versión HEAD de la rama principal.

¿Cómo hago esto?

+1

Creo que usted está buscando esto? http://stackoverflow.com/questions/556923/how-to-merge-my-local-uncommitted-changes-into-another-git-branch – zx1986

Respuesta

274

¿El procedimiento estándar no funciona?

  • hacer cambios
  • git stash save
  • git branch xxx HEAD
  • git checkout xxx
  • git stash pop

Shorter:

  • hacer cambios
  • git stash
  • git checkout -b xxx
  • git stash pop
+39

short: 'git checkout -b xxx' – eckes

+25

Solo para aclarar @eckes 'git checkout -b xxx' es una alternativa para hacer' git branch xxx HEAD' y luego 'git checkout xxx'. Para lograr lo que el OP quiere, aún necesita hacer los comandos 'git stash' también. – Simon

+9

Otro atajo: 'git stash' es equivalente a' git stash save' – sfletche

190

Como ya ha escondiste los cambios, todo lo que necesita es el de una sola línea:

  • git stash branch <branchname> [<stash>]

A partir de los documentos (https://www.kernel.org/pub/software/scm/git/docs/git-stash.html):

Crea y extrae una nueva rama llamada < BRANCHNAME> a partir de la cometen en la que el < alijo> fue creado originalmente, aplica los cambios registrados en < stash> al nuevo árbol de trabajo e índice. Si que tiene éxito, y < alijo> es una referencia de la forma @ alijo {< revisión>}, entonces se deja caer el < alijo>. Cuando no se proporciona < stash>, se aplica la última.

Esto es útil si la rama en la que ejecutó git stash save ha cambiado lo suficiente como para que git stash apply falle debido a conflictos. Dado que el alijo se aplica sobre la confirmación que era HEAD en el momento en que se ejecutó git stash, restaura el estado originalmente oculto sin conflictos.

+3

Para stashes únicos, este es el camino a seguir. La referencia del nombre del alijo no es necesaria, ya que Git aplicará el alijo más reciente, cambiará a una nueva rama y aplicará el alijo en 1 comando. – sinisterOrange

+0

@RodneyGolpe Esto parece aplicar también el alijo a 'maestro'? Lo que quiero hacer es, desde 'master', git stash, entonces hubiera esperado que 'git stash branch [branchname] aplicara el stash a una nueva rama, dejando master sin las ediciones? –

+2

@DavidDoria Debes enviar los cambios a tu nueva sucursal antes de volver al máster. –

Cuestiones relacionadas