Tout d'abord: comprenons pourquoi nous devons utiliser stash?
Pour comprendre ce qu'est stash, nous devons d'abord comprendre les 3 états
. Git a un modèle intégré nommé 3 états
qui est la structure interne de git pour travailler avec le dépôt local.
![Diagramme des 3 états]()
Le "problème" avec les 3 états
est qu'il y en a un par dépôt et non un par branche. Donc lorsque nous changeons de branche, la seule chose qui est modifiée est le HEAD
qui pointe vers un commit différent.
Dans git, une branche n'est qu'un alias vers un commit donné, donc en changeant de branche comme expliqué précédemment, cela ne change que le HEAD
tout en laissant le répertoire de travail et la zone de staging
inchangés et en laissant toutes les modifications en l'état. [Le répertoire de travail est mis à jour avec les fichiers requis que la nouvelle branche possède, mais ce n'est pas partie de notre explication.]
Donc si nous ajoutons de nouveaux fichiers, en modifions d'autres et que maintenant nous voulons passer à une autre branche, nous aurons de la saleté laissée dans notre répertoire de travail et notre zone de staging comme le montre ci-dessous.
Nous avons un peu de travail sale nous suivant peu importe la branche sur laquelle nous travaillons maintenant.
![insérer la description de l'image ici]()
Comment pouvons-nous travailler sur plusieurs branches?
La plupart des utilisateurs de git utilisent stash
pour pouvoir travailler simultanément sur plusieurs branches. git stash
est la manière basique d'y parvenir puisque git stash
sauvegarde notre travail dans une zone distincte nommée stash.
Ensuite, nous pouvons vérifier le code à tout moment pour n'importe quelle branche donnée. ![insérer la description de l'image ici]()
Jusqu'ici tout va bien.
Où est le problème et pourquoi ne pas utiliser stash en premier lieu?
Le problème est que lorsque nous utilisons stash, nous n'avons pas la capacité de vraiment travailler sur plusieurs branches puisque nous devrons stasher à chaque fois que nous voulons changer de branche.
Un autre problème est que nous pouvons rapatrier le code stash dans la mauvaise branche et alors nous devons déterminer quels fichiers sont les bons, si nous avons fait une erreur.
Comment pouvons-nous vraiment travailler sur plusieurs branches?
Git avait cette capacité depuis 2007. Sous le dossier contrib
il y avait une commande cachée nommée 'new-workdir' qui a été ensuite ajoutée à git dans la version 2.5
et a été renommée en git worktree
.
git worktree
git worktree
créera un nouveau dossier de travail nous permettant de travailler sur plusieurs branches en même temps. Chaque copie pointera vers le dépôt d'origine tandis que les 3 états
sont une copie nouvelle et fraîche. Cela nous évite d'utiliser git stash
ou même de cloner un nouveau dépôt, puisque ces worktrees partagent le même dépôt, nous pouvons vérifier n'importe quelle branche sur n'importe quel worktree, nous pouvons faire un cherry-pick ou un merge et tout se fera localement sur notre machine.
Utilisation:
git worktree add
créera un autre dossier sur votre ordinateur vous permettant de travailler sur une branche différente simultanément.
Cela vous permettra de faire des expériences sur le nouveau worktree sans avoir aucun effet sur le dépôt lui-même. Dans l'image ci-jointe, vous pouvez voir qu'il y a 2 dossiers de travail séparés mais tous les deux utilisent un seul dépôt et partagent le contenu.
![insérer la description de l'image ici]()