guide commands git git-worktree

guide - git commands pdf



¿Por qué git worktree add crea una rama, y puedo eliminarla? (6)

git worktree add para crear un nuevo worktree. Noté que se ha creado una nueva rama en el repositorio con el mismo nombre que el worktree. ¿Para qué es esta rama?

He comprobado otra sucursal preexistente en el segundo árbol de trabajo. ¿Soy libre de eliminar la rama que git worktree add ?


Desde Git 2.17.0, puede ejecutar de forma segura este comando todo en uno.

git worktree remove <path>


La sucursal es necesaria porque no puede tener la misma sucursal desprotegida en diferentes áreas de trabajo al mismo tiempo.

Entonces, si no especifica una sucursal al agregar el área de trabajo, git agregará una automáticamente, según su rama actual y con el nombre del directorio de la área de trabajo.

Puede preguntar, ¿por qué no puedo tener la misma salida de sucursal dos veces? Piense en lo que pasará con el árbol de trabajo A cuando se comprometa con B, si ambos comparten la rama ... el árbol de trabajo A verá el compromiso en B como una diferencia local, ¡pero a la inversa! como si git reset --soft HEAD^ ... Eso sería bastante peligroso.

Por cierto, esa es la misma razón por la que no puede enviar a una rama de un repositorio no desnudo que está desprotegido.

Sobre tu última pregunta: ¿puedes borrar la rama? Por supuesto, esa rama no es de ninguna manera especial. Puede eliminarlo siempre que no esté desprotegido en ningún lugar.


Mientras los demás responden a esta pregunta, pongo comandos para eliminar la folder , eliminar el worktree y eliminar la branch aquí:

Primero, liste todos sus árboles de trabajo para verificar dos veces ...

$ git worktree list

Luego, borra la carpeta del árbol de trabajo.

$ rm -rf ../path/to/worktree

Después de eso, elimine el propio worktree.

$ git worktree prune

En caso de que tenga más de un árbol de trabajo, el comando anterior solo poda el árbol de trabajo que su ruta ya no existe, así que no se preocupe.

finalmente, elimine la rama (el mismo nombre de rama que el árbol de trabajo)

$ git branch -D <branch-name>



git worktree --help claramente menciona esto como se muestra a continuación.

COMMANDS add <path> [<branch>] Create <path> and checkout <branch> into it. The new working directory is linked to the current repository, sharing everything except working directory specific files such as HEAD, index, etc. If <branch> is omitted and neither -b nor -B is used, then, as a convenience, a new branch based at HEAD is created automatically, as if -b $(basename <path>) was specified. prune Prune working tree information in $GIT_DIR/worktrees.


git worktree agregará una nueva rama si no se especifica ninguna:

Si se omite <commit-ish> y no se usa -b ni -B ni --detach , entonces, como una conveniencia, se crea automáticamente una nueva rama basada en HEAD, como si se especificara -b $(basename <path>) .

Desde Git 2.17 , puedes eliminar esa rama con git worktree remove .

Pero, ese mismo comando de remove también incluía:

Los árboles de trabajo impuros o los que tienen submódulos se pueden eliminar con --force .
El árbol de trabajo principal no puede ser eliminado.

Cierto ... excepto que --force no se implementó completamente en Git 2.17.

Con Git 2.18 (Q2 2018), " git worktree remove " descubrió que " -f " es una abreviatura para la opción " --force ", igual que para "git worktree add".

Ver commit d228eea (17 de abril de 2018) por Stefan Beller ( stefanbeller ) .
Ayudado por: Eric Sunshine ( sunshineco ) .
(Fusionada por Junio ​​C Hamano - gitster - in commit 90186fa , 08 de mayo de 2018)

worktree : acepte -f tan corto como --force for --force

Muchos comandos admiten una opción " --force ", frecuentemente abreviada como " -f ".
Sin embargo, git worktree remove enrollado a mano " git worktree remove " se olvida de reconocer la forma corta, a pesar de que git-worktree.txt documenta " -f " como compatible.
Reemplace OPT_BOOL con OPT__FORCE , que proporciona " -f " de forma gratuita, y hace que el PARSE_OPT_NOCOMPLETE '' remove '' sea coherente con el análisis '' add '' (que también especifica el indicador PARSE_OPT_NOCOMPLETE ).