remote - git commit
Git: "Actualmente no está en ninguna sucursal". ¿Hay alguna manera fácil de volver a una sucursal, mientras se mantienen los cambios? (8)
Así que hice un trabajo en el repositorio y cuando estoy a punto de comprometerme, me doy cuenta de que no estoy actualmente en ninguna rama.
Esto sucede mucho cuando se trabaja con submódulos y puedo resolverlo, pero el proceso es tedioso y he pensado que debe haber una manera más fácil de hacerlo.
¿Hay una forma fácil de volver a una sucursal, mientras se mantienen los cambios?
De forma alternativa, puede configurar sus submódulos para que, en lugar de estar en su estado de cabecera desconectada, pueda extraer una rama.
Editado para agregar:
Una forma es verificar una rama particular del submódulo cuando lo agrega con el indicador -b:
git submodule add -b master <remote-repo> <path-to-add-it-to>
Otra forma es ir al directorio de submódulos y simplemente verificarlo
git checkout master
El siguiente método puede funcionar:
git rebase HEAD master
git checkout master
Esto reestablecerá tus cambios HEAD actuales sobre el maestro. Entonces puedes cambiar la rama.
Una forma alternativa es verificar primero la rama:
git checkout master
Entonces, Git debería mostrar SHA1 de tus commit separados, entonces puedes seleccionarlos, por ejemplo
git cherry-pick YOURSHA1
O también puede combinar la última:
git merge YOURSHA1
Para ver todas tus confirmaciones de diferentes ramas (para asegurarte de que las tienes), ejecuta: git reflog
.
Recientemente me encontré con este problema de nuevo. 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 basta con echar un vistazo a la rama en la que desea comprometerse. Git mantendrá el árbol de trabajo incluso si no lo escondes.
git checkout existing_branch_name
Si quieres trabajar en una nueva sucursal, esto debería funcionar para ti:
git checkout -b new_branch_name
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, abrirlo 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 toman tanto tiempo para ejecutarse de todos modos. Por lo tanto, no aceptaré esta respuesta, a menos que reciba milagrosamente más votos ascendentes (o al menos cercanos) que la respuesta actualmente aceptada.
Sé que le dije a Babay en 2012 que pensaba que era poco probable que alguien no se diera cuenta de que no estaban en una sucursal y se comprometieran. Esto me pasó a mí, así que supongo que tengo que admitir que estaba equivocado, pero teniendo en cuenta que me llevó hasta 2016 que esto me pasara, podrías argumentar que, de hecho, es poco probable.
De todos modos, la creación de una nueva sucursal es excesiva en mi opinión. Todo lo que tienes que hacer es:
git checkout some-branch
git merge commit-sha
Si no copió el commit-sha antes de verificar la otra rama, puede encontrarlo fácilmente ejecutando:
git reflog
Saliendo de otra manera aquí
git branch newbranch
git checkout master
git merge newbranch
Si no has cometido:
git stash
git checkout some-branch
git stash pop
Si se ha comprometido y no ha cambiado nada desde entonces:
git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}
Si has cometido y luego has hecho un trabajo extra:
git stash
git log --oneline -n1 # this will give you the SHA
git checkout some-branch
git merge ${commit-sha}
git stash pop
esto me ayudó
git checkout -b newbranch
git checkout master
git merge newbranch
git branch -d newbranch
git checkout master
Ese es el resultado algo como esto:
Warning: you are leaving 2 commits behind, not connected to
any of your branches:
1e7822f readme
0116b5b returned to clean django
If you want to keep them by creating a new branch, this may be a good time to do so with:
git branch new_branch_name 1e7822f25e376d6a1182bb86a0adf3a774920e1e
Hagamoslo:
git merge 1e7822f25e376d6a1182bb86a0adf3a774920e1e