ver tipos tag qué modificados existen example etiquetas crear comando archivos git git-stash

tipos - Git: crea una rama a partir de cambios no programados/no comprometidos en el maestro



git ver archivos modificados (4)

Dos cosas que puedes hacer:

git checkout -b sillyname git commit -am "silly message" git checkout -

o

git stash -u git branch sillyname stash@{0}

( git checkout - <- el guión es un atajo para la rama anterior en la que estabas)

( git stash -u <- la -u significa que también toma cambios sin etapas)

Contexto: estoy trabajando en el maestro añadiendo una característica simple. Después de unos minutos, me doy cuenta de que no era tan simple y que debería haber sido mejor trabajar en una nueva sucursal.

Esto siempre me sucede a mí y no tengo idea de cómo cambiarme a otra rama y tomar todos estos cambios no confirmados, dejando la rama maestra limpia. git stash && git stash branch new_branch que git stash && git stash branch new_branch simplemente lograría eso, pero esto es lo que obtengo:

~/test $ git status # On branch master nothing to commit (working directory clean) ~/test $ echo "hello!" > testing ~/test $ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: testing # no changes added to commit (use "git add" and/or "git commit -a") ~/test $ git stash Saved working directory and index state WIP on master: 4402b8c testing HEAD is now at 4402b8c testing ~/test $ git status # On branch master nothing to commit (working directory clean) ~/test $ git stash branch new_branch Switched to a new branch ''new_branch'' # On branch new_branch # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: testing # no changes added to commit (use "git add" and/or "git commit -a") Dropped refs/stash@{0} (db1b9a3391a82d86c9fdd26dab095ba9b820e35b) ~/test $ git s # On branch new_branch # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: testing # no changes added to commit (use "git add" and/or "git commit -a") ~/test $ git checkout master M testing Switched to branch ''master'' ~/test $ git status # On branch master # Changed but not updated: # (use "git add <file>..." to update what will be committed) # (use "git checkout -- <file>..." to discard changes in working directory) # # modified: testing # no changes added to commit (use "git add" and/or "git commit -a")

¿Sabes si hay alguna manera de lograr esto?


No hay necesidad de esconder.

git checkout -b new_branch_name

No toca tus cambios locales. Simplemente crea la rama desde la CABEZA actual y establece la CABEZA allí. Así que supongo que eso es lo que quieres.

--- Editar para explicar el resultado del checkout master ---

¿Está confundido porque el checkout master no descarta sus cambios?

Dado que los cambios son solo locales, git no quiere que los pierdas demasiado fácilmente. Al cambiar de rama, git no sobrescribe tus cambios locales. El resultado de su checkout master es:

M testing

, lo que significa que sus archivos de trabajo no están limpios. git cambió la CABEZA, pero no sobrescribió sus archivos locales. Es por eso que su último estado aún muestra sus cambios locales, a pesar de que está en master .

Si realmente desea descartar los cambios locales, debe forzar el proceso de pago con -f .

git checkout master -f

Ya que tus cambios nunca fueron cometidos, los perderías.

Intente volver a su sucursal, confirme los cambios y luego vuelva a verificar el maestro.

git checkout new_branch git commit -a -m"edited" git checkout master git status

Debería recibir un mensaje M después de la primera verificación, pero no más después de la checkout master , y el git status debería mostrar archivos modificados.

--- Editar para aclarar la confusión sobre el directorio de trabajo (archivos locales) ---

En respuesta a su primer comentario, los cambios locales son simplemente ... bueno, locales. Git no los guarda automáticamente, debe indicarle que los guarde para más adelante. Si realiza cambios y no los confirma ni los guarda de forma explícita, git no los versionará. Si cambia HEAD ( checkout master ), los cambios locales no se sobrescriben desde que no se guardaron.


Si está utilizando el cliente de GitHub para Windows (como lo soy yo) y se encuentra en la situación de haber realizado cambios no confirmados que desea mover a una nueva sucursal, simplemente puede "crear una nueva sucursal" a través del cliente de GitHub. Cambiará a la rama recién creada y conservará los cambios.


Tratar:

git stash git checkout -b new-branch git stash apply