Mover el trabajo existente, no comprometido a una nueva rama en Git
Comencé a trabajar en una nueva característica y después de codificar un poco, decidí que esta característica debería estar en su propia rama.
¿Cómo puedo mover los cambios no comprometidos existentes a una nueva rama y restablecer la actual?
Quiero restablecer mi rama actual mientras conservo el trabajo existente en la nueva característica.
5 answers
Utilice lo siguiente:
git checkout -b <new-branch>
Esto dejará su rama actual como está, creará y comprará una nueva rama y mantendrá todos sus cambios. Luego puedes hacer un commit con:
git add <files>
Y confirmar a su nueva rama con:
git commit -m "<Brief description of this commit>"
Los cambios en el directorio de trabajo y los cambios en index no pertenecen a ninguna rama todavía. Esto cambia donde esos cambios terminarían.
No restableces tu rama original, se queda como está. El último commit en <old-branch>
seguirá siendo el mismo. Por lo tanto usted checkout -b
y luego comprometerse.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-27 11:42:20
Alternativamente:
-
Guardar los cambios actuales en un alijo temporal:
$ git stash
-
Crea una nueva rama basada en este alijo, y cambia a la nueva rama:
$ git stash branch <new-branch> stash@{0}
Consejo: utilice la tecla tab para reducir la escritura del nombre del alijo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-15 22:50:34
Si has estado haciendo commits en tu rama principal mientras codificabas, pero ahora quieres mover esos commits a una rama diferente:
-
Copie su historial actual en una nueva rama, trayendo también cualquier cambio no comprometido:
git checkout -b <new-feature-branch>
-
Ahora fuerza la rama original "desordenada" a retroceder: (sin cambiar a ella)
git branch -f <previous-branch> <earlier-commit-id>
Por ejemplo:
git branch -f master origin/master
O si hubieras hecho 4 commits:
git branch -f master HEAD~4
Advertencia: parece que git branch -f master origin/master
se restablecer la información de seguimiento para esa rama. Por lo tanto, si ha configurado su rama master
para enviar a otro lugar que no sea origin/master
, entonces esa configuración se perderá.
Una alternativa es usar esta técnica de reinicio. Pero esas instrucciones descartarán cualquier cambio no comprometido que tenga. Si quieres guardarlos, aliéntalos primero y deshazte de ellos en el final.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-14 04:05:16
Si lo confirmas, también puedes seleccionar el ID de confirmación individual. Hago esto a menudo cuando empiezo a trabajar en master,y luego quiero crear una rama local antes de subir a mi origin/.
git cherry-pick <commitID>
Hay mucho que puede hacer con cherry-pick, como se describe aquí, pero esto podría ser un caso de uso para usted.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-30 20:58:06
El escenario común es el siguiente: Olvidé crear la nueva rama para la nueva característica, y estaba haciendo todo el trabajo en la antigua rama de característica. He comprometido todo el trabajo " viejo "a la rama maestra, y quiero que mi nueva rama crezca desde el"maestro". No he hecho un solo compromiso de mi nuevo trabajo. Aquí está la estructura de la rama: "master" - >"Old_feature"
git stash
git checkout master
git checkout -b "New_branch"
git stash apply
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-13 16:07:54