Estaba trabajando en una rama de git y estaba listo para confirmar mis cambios, así que hice una confirmación con un mensaje de confirmación útil. Luego, distraídamente, hice cambios menores en el código que no vale la pena mantener. Ahora quiero cambiar ramas, pero git me da,
error: tiene cambios locales en "X"; No puede cambiar de rama.
¿Puedo cambiar de sucursal sin comprometerme? Si es así, ¿cómo puedo configurar esto? Si no, ¿cómo salgo de este problema? Quiero ignorar los cambios menores sin comprometerme y solo cambiar las ramas.
git
branch
git-checkout
Daniel Farrell
fuente
fuente
error: You have local changes to '<filename>'; cannot switch branches.
y la rama no cambiará. puede hacerlogit checkout -m <branch-name>
para fusionar conflictos y pagar a la sucursal y resolver conflictos usted mismo, ogit checkout -f <branch-name>
ignorar los cambios.Respuestas:
Necesita un estado limpio para cambiar las ramas. El pago de la sucursal solo se permitirá si no afecta a los 'archivos sucios' (como comenta Charles Bailey en los comentarios).
De lo contrario, deberías:
reset --hard HEAD
(si no le importa perder esos cambios menores) ocheckout -f
(Al cambiar de rama, proceda incluso si el índice o el árbol de trabajo difieren de HEAD. Esto se usa para descartar cambios locales).O, más recientemente:
git switch
:git switch -f <branch-name>
(
-f
es la abreviatura de--force
, que es un alias para--discard-changes
)Esto difiere de
git switch -m <branch-name>
, lo que desencadena una fusión de tres vías entre la rama actual, el contenido de su árbol de trabajo y la nueva rama está hecha: de esa manera no perderá su trabajo en progreso.fuente
Si desea descartar los cambios,
Si quieres conservar los cambios,
fuente
git stash save
(cuando está en la rama de trabajo Y) entoncesgit checkout branchX
haga algo,git add/commit -m
etc.git checkout branchY
ygit stash pop
recuperar el alijogit stash save
ahora está en desuso a favor degit stash push
bueno, debería ser
fuente
git stash
tome por defectogit stash save
Seguir,
fuente
Tenga en cuenta que si ha fusionado sucursales remotas o tiene compromisos locales y desea volver al HEAD remoto, debe hacer lo siguiente:
HEAD
solo solo se referirá al commit / merge local: varias veces he olvidado que al reiniciar y terminar con "su repositorio es X commits ahead .." cuando tenía la intención total de bombardear TODOS los cambios / commits y volver a la rama remota .fuente
Si ha realizado cambios en los archivos que Git también necesita cambiar al cambiar de sucursal, no se lo permitirá. Para descartar cambios de trabajo, use:
Luego, podrás cambiar de rama.
fuente
Ninguna de estas respuestas me ayudó porque todavía tenía archivos sin seguimiento incluso después de reiniciar y guardar. Tenía que hacer:
fuente
cambiando a una nueva sucursal perdiendo cambios:
cambio a una rama existente perdiendo cambios:
fuente
Respuesta fácil:
es forzar el pago de una sucursal
Forzar la verificación de una rama le dice a git que elimine todos los cambios que ha realizado en la rama actual y desproteja la deseada.
o en caso de que estés revisando un commit
La respuesta a eso es No , esa es literalmente la filosofía de Git: hacer un seguimiento de todos los cambios, y que cada nodo (es decir, commit) debe estar actualizado con los últimos cambios que haya realizado, a menos que haya hizo un nuevo compromiso, por supuesto.
¿Decidiste mantener los cambios?
Luego guárdelos usando
y luego para mostrar sus cambios en la rama deseada, use
que aplicará los cambios pero también los mantendrá en la cola oculta. Si no desea mantenerlos en la pila de alijo, entonces revíselos usando
Eso es el equivalente de
apply
y luegodrop
fuente
Cierre la terminal, elimine la carpeta donde está su proyecto, luego clone nuevamente su proyecto y listo.
fuente
reset --hard
!Si desea mantener los cambios y cambiar la rama en un comando de línea única
fuente
Mover cambios no confirmados a una nueva sucursal
Creé un
.gitconfig
alias para esto:Para cambiar a
new-branch-name
, use:Y cualquier archivo no comprometido y cambios de índice se mantendrán.
fuente
git checkout -f your_branch_name
Si tiene problemas para revertir los cambios:
si desea eliminar directorios y archivos sin seguimiento:
fuente
Para cambiar a otra rama sin confirmar los cambios cuando git stash no funciona. Puede usar el siguiente comando:
git checkout -f nombre-sucursal
fuente