Esto a menudo me sucede: escribo un código, voy a revisar mis cambios y luego me doy cuenta de que no estoy en la rama adecuada para registrar esos cambios. Sin embargo, no puedo cambiar a otra rama sin revertir mis cambios. ¿Hay alguna forma de mover los cambios a otra rama para que se verifique allí?
                422
            
  
            
C:\kf [develop +0 ~4 -0]> git checkout feature/customers<br/> error: Your local changes to the following files would be overwritten by checkout:<br/> AspWebApp.vNext/global.asa<br/> RestApi/Web.config<br/> Please, commit your changes or stash them before you can switch branches.<br/> AbortingSi aún no ha confirmado sus cambios , simplemente use
git checkoutpara moverse a la nueva rama y luego confirme normalmente; los cambios en los archivos no están vinculados a una rama particular hasta que los confirme.Si ya ha confirmado sus cambios:
git logy recuerde el SHA del compromiso que desea mover.git cherry-pick SHAsustituyendo el SHA desde arriba.git reset HEAD~1para restablecer antes de su confirmación de rama incorrecta.cherry-picktoma un compromiso determinado y lo aplica al encabezado actualmente desprotegido, lo que le permite copiar el compromiso a una nueva rama.fuente
git reset HEAD~N --softy luegogit checkout -bmover todo el código ahora no confirmado a una nueva rama.Lamentablemente, esto también me sucede con bastante frecuencia y lo uso
git stashsi me di cuenta de mi error antesgit commity usogit cherry-pickotra manera, ambos comandos se explican bastante bien en otras respuestasQuiero agregar una aclaración para
git checkout targetBranch: este comando solo preservará su directorio de trabajo y la instantánea por etapas si targetBranch tiene el mismo historial que su rama actualLa declaración de @ Amber no es falsa, cuando se mueve a una nueva rama ,
git checkout -b newBranchse crea un nuevo puntero y apunta exactamente a la misma confirmación que su rama actual.De hecho, si tiene otra rama que comparte el historial con su rama actual (ambas apuntan a la misma confirmación) puede "mover sus cambios"
git checkout targetBranchSin embargo, por lo general, las diferentes ramas significan un historial diferente, y Git no le permitirá cambiar entre estas ramas con un directorio de trabajo sucio o un área de preparación. en cuyo caso puede hacer
git checkout -f targetBranch(limpiar y descartar cambios) ogit stage+git checkout targetBranch(limpiar y guardar cambios), simplemente ejecutargit checkout targetBranchdará un error:fuente
Un restablecimiento de git suave devolverá los cambios confirmados a su índice. Luego, verifique la rama en la que tenía la intención de comprometerse. Luego git commit con un nuevo mensaje de confirmación.
git reset --soft <commit>git checkout <branch>git commit -m "Commit message goes here"De git docs :
fuente