Estuve trabajando con Git por un time (aunque no es un experto) y esta pregunta nunca viene a mi mente, pero ahora está dando vueltas.
Digamos que tengo un repository con tres twigs más master
:
No estoy usando master
para que branch_1
convierta y se comporte como master
. Generalmente y como debería ser, realizo un nuevo desarrollo en branch_1_devel
y luego branch_1_devel
esos cambios cuando están listos en branch_1
.
Ahora quiero probar una nueva funcionalidad, así que he creado una nueva twig branch_1_devel_test
. Después de pagar en esa sucursal, realicé cambios en un file llamado file1
.
Es necesario hacer algo con más prioridad en branch_1_devel
por lo que debo branch_1_devel
esa twig y editar el mismo file1
. Después de todo, he agregado el file, branch_1
los cambios y luego me branch_1
en branch_1
.
Luego vuelvo a branch_1_devel_test
porque quiero continuar probando donde lo dejé en file1
.
Teniendo este escenario (si no entiendes, házmelo saber y trataré de ser más claro) algunas preguntas:
branch_1_devel
¿el branch_1_devel
file1
entrará en conflicto? lo que significa que perderé mis cambios anteriores? branch_1_devel_test
tan pronto como branch_1_devel_test
pago en otra sucursal? ¿Qué significará un problema si trato de realizar el pago en una nueva sucursal sin comprometer los cambios en la actual? La idea detrás de todo esto es: quiero probar algo, pero no quiero introducir cambios en branch_1_devel
ni en branch_1
.
Actualizar
Esta es una pequeña testing que hice para comprender cómo se comporta Git.
$ git branch master branch_1 * branch_1_devel $ git checkout -b branch_1_devel_test Switched to a new branch 'branch1_devel_test' $ git branch master branch_1 branch_1_devel * branch_1_devel_test
Ahora estoy en branch_1_devel_test
así que he creado un nuevo file vacío
$ git status # On branch branch_1_devel_test # Untracked files: # (use "git add <file>..." to include in what will be committed) # # application/controllers/AdminconsoledemoController.php # nothing added to commit but untracked files present (use "git add" to track)
Vuelve a branch_1_devel
$ git checkout branch_1_devel Switched to branch 'branch_1_devel' $ git status # On branch branch_1_devel # Untracked files: # (use "git add <file>..." to include in what will be committed) # # application/controllers/AdminconsoledemoController.php # nothing added to commit but untracked files present (use "git add" to track)
¿Por qué si el file fue creado en branch_1_devel_test
está siendo rastreado en branch_1_devel
? Eso es exactamente por lo que estoy tratando de evitar porque tendré que comprometer los cambios antes de extraer algo del origen en branch_1_devel
Si entiendo correctamente … si creas un file en branch_1_devel_test
sin comprometerlo, será independiente de las twigs (no será parte del repository). Esto significa que cuando vuelva a cambiar a branch_1_devel
el file seguirá allí como un file sin seguimiento. Si confirma el file en branch_1_devel_test
el file será parte del repository y desaparecerá cuando cambie la twig.
Si desea evitar tener el file por ahí, puede usar el mecanismo de stash
. En realidad, no estoy seguro de que puedas esconder files sin seguimiento. De todos modos, lo que estás tratando de hacer se ve raro: si creas un file que vale la pena save, debes hacerlo. Si luego, en el futuro, ya no lo necesitarás, puedes borrarlo (por supuesto, si es un file grande, las cosas son diferentes …)
Puede usar git worktree
para mantener el desarrollo en diferentes twigs sin tener que comit
ni stash
comit
. Permite verificar twigs en sus propios directorys de trabajo de forma independiente. Ejemplo:
git worktree add ../project-branch_1 branch_1
Sin embargo, el command worktree
se ha introducido en Git 2.5 y todavía se considera experimental:
El pago múltiple en general sigue siendo experimental, y el soporte para submodules está incompleto. NO se recomienda realizar varias comprobaciones de un superproyecto.
Nunca he tenido problemas, incluso con submodules, salvo la necesidad de eliminar manualmente los directorys de trabajo. Otros enlaces: ¿Para qué usaría git-worktree? , notas de github worktree .