tag remove practices crear commits commands best git git-checkout

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> .



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 .