remove - git tag commands
Qué hacer con el cometer hecho en una cabeza separada. (8)
Cree una rama donde se encuentre, luego cambie a maestro y fusione:
git branch my-temporary-work
git checkout master
git merge my-temporary-work
Usando git hice algo como esto
git clone
git checkout {a rev number tree rev before} (here i started to be in a detached head state)
//hacking
git commit
//hacking
git commit
(some commit where made on origin/master)
git pull (wich does complete because there was some error due to the fact that i''m no more on master)
Debido a que Git me dijo que podía cometer acero cuando estaba en un estado de cabeza separada, lo hice. Pero ahora me gustaría fusionar mi rama principal separada y mi rama maestra local, y luego enviar mi conjunto de cambios a origen / maestro.
Así que mi pregunta es cómo podría fusionar la rama maestra con mi estado real (cabeza separada)
En el caso de HEAD desconectado, realiza el trabajo como normal, excepto que no se actualiza ninguna rama nombrada. Para actualizar la rama maestra con sus cambios confirmados, haga una rama temporal donde se encuentre (de esta manera, la rama temporal tendrá todos los cambios confirmados que haya realizado en la CABEZA desconectada), luego cambie a la rama maestra y combine la rama temporal con el maestro.
git branch temp
git checkout master
git merge temp
Esto es lo que hice:
Básicamente, piense en la detached HEAD
como una nueva rama, sin nombre. Puede comprometerse en esta rama al igual que cualquier otra rama. Una vez que haya terminado de comprometerse, desea enviarlo al control remoto.
Así que lo primero que debe hacer es darle un nombre a este detached HEAD
. Puedes hacerlo fácilmente, mientras estés en este detached HEAD
:
git checkout -b some-new-name
Ahora puedes empujarlo a remoto como cualquier otra rama.
En mi caso, también quería adelantar esta rama para dominar junto con las confirmaciones que hice en el detached HEAD
(ahora some-new-branch
). Todo lo que hice fue
git checkout master
git pull # To make sure my local copy of master is up to date
git checkout some-new-branch
git merge master // This added current state of master to my changes
Por supuesto, lo fusioné luego para master
.
Eso es todo.
Podrías hacer algo como esto.
# Create temporary branch for your detached head
git branch tmp
# Go to master
git checkout master
# Merge in commits from previously detached head
git merge tmp
# Delete temproary branch
git branch -d tmp
Aún más simple sería
git checkout master
git merge HEAD@{1}
pero esto tiene el ligero peligro de que si comete un error, puede ser un poco más difícil recuperar los compromisos realizados en la cabeza separada.
Simplemente puedes hacer git merge <commit-number>
o git cherry-pick <commit> <commit> ...
Como lo sugirió Ryan Stewart, también puede crear una rama a partir de la HEAD actual:
git branch brand-name
O simplemente una etiqueta:
git tag tag-name
Tal vez no sea la mejor solución (reescribirá el historial), pero también podría hacer git reset --hard <hash of detached head commit>
.
También he fundado un artículo donde se explica cómo procesarlo. Lo agrego porque es un poco diferente de lo que se propuso. Pero creo que todas las proposiciones son válidas.
http://edspencer.net/2009/10/git-what-to-do-if-you-commit-to-no-branch.html
Más tarde aceptaré la primera respuesta como la buena.
Una solución fácil es simplemente crear una nueva rama para ese compromiso y hacer el pago: git checkout -b <branch-name> <commit-hash>
.
De esta manera, todos los cambios realizados se guardarán en esa rama. En caso de que necesite limpiar su rama maestra de las confirmaciones sobrantes, asegúrese de ejecutar git reset --hard master
.
Con esto, volverá a escribir sus sucursales, así que asegúrese de no molestar a nadie con estos cambios. Asegúrese de leer este artículo para ilustrar mejor el estado de HEAD desconectado .