J'ai utilisé git worktree add
pour créer un nouvel arbre de travail. J'ai remarqué que cela a créé une nouvelle branche dans le référentiel avec le même nom que l'arbre de travail. A quoi sert cette branche?
J'ai vérifié une autre branche préexistante dans le deuxième arbre de travail. Suis-je libre de supprimer la branche créée par git worktree add
?
La branche est nécessaire car vous ne pouvez pas extraire la même branche dans plusieurs arbres de travail en même temps.
Donc, si vous ne spécifiez pas de branche lors de l'ajout de l'arbre de travail, alors git en ajoutera une automatiquement, en fonction de votre branche actuelle et du nom du répertoire de l'arbre de travail.
Vous pouvez vous demander pourquoi je ne peux pas avoir la même caisse deux fois? Pensez à ce qui va arriver à l’arbre de travail A lorsque vous vous engagez sur B, s’ils partagent la même branche ... l’arbre de travail A verra le commit en B comme une différence locale, mais à l’inverse! comme si vous le faisiez git reset --soft HEAD^
... Ce serait assez dangereux.
BTW, c’est la même raison pour laquelle vous ne pouvez pas Transférer vers une branche d’un référentiel non-nu extrait.
À propos de votre dernière question: pouvez-vous supprimer la branche? Bien sûr, cette branche n’a rien de spécial. Vous pouvez le supprimer tant qu'il n'est pas extrait nulle part.
Alors que les autres gars répondent à cette question, je mets des commandes pour supprimer la folder
, supprimer worktree
et supprimer branch
ici:
commencez par lister tous vos arbres de travail à vérifier ...
$ git worktree list
puis supprimez le dossier de l'arborescence
$ rm -rf ../path/to/worktree
après cela, supprimez le arbre de travail lui-même
$ git worktree Prune
si vous avez plus d'un arbre de travail, la commande ci-dessus élimine uniquement l'arbre de travail car son chemin n'existe plus, alors ne vous inquiétez pas!
enfin, supprimez la branche (même nom de branche que l'arbre de travail)
$ git branch -D <branch-name>
git worktree
ajoutera une nouvelle branche si aucune n'est spécifiée:
Si
<commit-ish>
est omis et que ni-b
, ni-B
ni--detach
ne sont utilisés, ensuite, par commodité, une nouvelle branche basée sur HEAD est créée automatiquement, comme si-b $(basename <path>)
était spécifié.
Depuis Git 2.17 , vous pouvez supprimer cette branche avec git worktree remove
.
Mais cette même commande remove
incluait également:
Les arbres de travail impurs ou comportant des sous-modules peuvent être supprimés avec
--force
.
L'arbre de travail principal ne peut pas être supprimé.
True ... sauf que --force
n'était pas entièrement implémenté dans Git 2.17.
Avec Git 2.18 (T2 2018), "git worktree remove
" a appris que "-f
" était un raccourci pour l'option "--force
", tout comme pour "git worktree add".
Voir commit d228eea } _ (17 avril 2018) de Stefan Beller (stefanbeller
) }.
Aidé de: Eric Sunshine (sunshineco
) }.
(Fusionné par Junio C Hamano - gitster
- à commit 90186fa , 08 mai 2018)
worktree
: accepter-f
comme raccourci pour--force
pour suppressionDe nombreuses commandes prennent en charge une option "
--force
", souvent abrégée en "-f
".
Cependant, "git worktree remove
" roulé à la mainOPT_BOOL
oublie reconnaître la forme abrégée, malgrégit-worktree.txt
documentant "-f
" comme supporté.
RemplacezOPT_BOOL
parOPT__FORCE
, qui fournit gratuitement "-f
" et rend "remove
" cohérent avec l'analyse de l'option "add
" (qui spécifie également l'indicateurPARSE_OPT_NOCOMPLETE
).
git worktree --help le mentionne clairement ci-dessous.
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.
Vous semblez pouvoir fonctionner en mode détaché avec --detach
, qui ne créera pas de branche. Cela peut être utile si vous ne prévoyez pas de modifier la structure de travail, mais simplement de générer ou d'exécuter des tests, par exemple.
Source: https://stacktoheap.com/blog/2016/01/19/using-multiple-worktrees-with-git/#long-running-tasks
Depuis Git 2.17.0, vous pouvez exécuter cette commande tout-en-un en toute sécurité.
git worktree remove <path>