Así que he trabajado en el repositorio y, cuando estoy a punto de comprometerme, me doy cuenta de que actualmente no estoy en ninguna rama.
Esto sucede mucho cuando trabajo con submódulos y puedo resolverlo, pero el proceso es tedioso y he estado pensando que debe haber una manera más fácil de hacerlo.
¿Hay una manera fácil de volver a una sucursal, manteniendo los cambios?
git
branch
git-checkout
Erik B
fuente
fuente
git show
ogit rev-parse HEAD
), cambie a la rama y luegogit cherry-pick
siga el hash de confirmación.git merge _hash_
git merge <hash-of-the-commit-you-just-made>
.esto me ayudó
fuente
Ese resultado es algo como esto:
Hagamoslo:
fuente
git gc
entre ejecutar esos dos comandos, perderías esas confirmaciones, pero a menos que estés ejecutandogit gc
automáticamente, este debería ser un enfoque bastante libre de riesgos. Todavía iría con la respuesta de babay, pero si quieres evitar escribir dos comandos adicionales, supongo que este es el camino a seguir.Dejando otro camino aquí
fuente
Alternativamente, puede configurar sus submódulos para que, en lugar de estar en su estado de cabeza separada predeterminada, revise una rama.
Editado para agregar:
Una forma es pagar una rama particular del submódulo cuando la agrega con el indicador -b:
Otra forma es ir al directorio de submódulos y echarle un vistazo
fuente
gitmodules
tal vez?Una forma de terminar en esta situación es después de hacer un rebase desde una rama remota. En este caso, los nuevos commits son señalados por ellos,
HEAD
peromaster
no apuntan a ellos, sino que apuntan a donde sea que estuvieras antes de cambiar la base de la otra rama.Puede hacer que esto confirme su nuevo
master
haciendo:Esto se actualiza
master
a la fuerza para señalarHEAD
(sin ponerlomaster
) y luego cambia amaster
.fuente
Recientemente me encontré con este problema nuevamente. Ha pasado un tiempo desde la última vez que trabajé con submódulos y después de haber aprendido más sobre git, me di cuenta de que simplemente verificar la rama en la que desea comprometerse es suficiente. Git mantendrá el árbol de trabajo incluso si no lo escondes.
Si desea trabajar en una nueva sucursal, esto debería funcionar para usted:
El proceso de pago fallará si tiene conflictos en el árbol de trabajo, pero eso debería ser bastante inusual y si sucede, puede esconderlo, reventarlo y resolver el conflicto.
En comparación con la respuesta aceptada, esta respuesta le ahorrará la ejecución de dos comandos, que en realidad no tardan tanto en ejecutarse. Por lo tanto, no aceptaré esta respuesta, a menos que milagrosamente obtenga más votos positivos (o al menos cercanos) que la respuesta actualmente aceptada.
fuente
El siguiente método puede funcionar:
Esto cambiará los cambios actuales de HEAD encima del maestro. Entonces puedes cambiar la rama.
La forma alternativa es verificar primero la sucursal:
Luego, Git debería mostrar SHA1 de sus confirmaciones separadas, luego puede elegirlas, por ejemplo
O también puedes fusionar la última:
Para ver todas las confirmaciones de diferentes ramas (para asegurarse de que los haya), ejecute:
git reflog
.fuente
Sé que le dije a babay en 2012 que pensaba que era poco probable que alguien no se diera cuenta de que no estaba en una sucursal y se comprometiera. Esto me sucedió a mí, así que supongo que tengo que admitir que me equivoqué, pero teniendo en cuenta que me tomó hasta 2016 para que esto me sucediera, podría argumentar que, de hecho, es poco probable.
De todos modos, crear una nueva sucursal es excesivo en mi opinión. Todo lo que tienes que hacer es:
Si no copió el commit-sha antes de verificar la otra rama, puede encontrarlo fácilmente ejecutando:
fuente