Résoudre le conflit de fusion avec Git Stash
L'une des façons les plus courantes et utiles de résoudre l'erreur "Your local changes would be overwritten by merge" est d'utiliser git stash
. La commande git stash
enregistre temporairement vos modifications non validées afin que vous puissiez les appliquer plus tard.
Qu'est-ce que Git Stash
git stash
est une commande Git qui prend vos modifications non validées (staged et unstaged), les enregistre pour une utilisation ultérieure, puis annule les modifications dans votre copie de travail.
Utiliser Git Stash pour résoudre l'erreur
Utilisons git stash
pour enregistrer nos modifications non validées :
git stash
Vous devriez voir une sortie similaire à :
Saved working directory and index state WIP on main: xxxxxxx Initial commit
Ce message confirme que vos modifications ont été enregistrées. Vérifions que notre répertoire de travail est maintenant propre :
git status
Vous devriez voir :
On branch main
nothing to commit, working tree clean
Vérifions maintenant le contenu de script.js
:
cat script.js
Vous devriez voir le contenu original :
console.log('Hello, Git!');
Fusionner la branche de développement
Maintenant que notre répertoire de travail est propre, nous pouvons fusionner en toute sécurité la branche development
:
git merge development
Vous devriez voir :
Updating xxxxxxx..xxxxxxx
Fast-forward
script.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Vérifions à nouveau le contenu de script.js
:
cat script.js
Maintenant, vous devriez voir :
console.log('Hello from development branch!');
Récupérer vos modifications stashed
Maintenant que nous avons réussi à fusionner la branche development
, récupérons nos modifications stashed :
git stash list
Vous devriez voir :
stash@{0}: WIP on main: xxxxxxx Initial commit
Cela montre que nous avons un stash enregistré. Appliquons-le :
git stash apply
Vous pourriez voir un message de conflit :
Auto-merging script.js
CONFLICT (content): Merge conflict in script.js
Ceci est normal car Git essaie d'appliquer vos modifications stashed par-dessus le fichier fusionné. Vérifions le contenu de script.js
:
cat script.js
Vous devriez voir quelque chose comme :
<<<<<<< Updated upstream
console.log('Hello from development branch!');
=======
console.log('Hello from main branch!');
>>>>>>> Stashed changes
Il s'agit d'un conflit de fusion que vous devez résoudre manuellement. Ouvrez le fichier en utilisant nano :
nano script.js
Modifiez le fichier pour conserver les deux modifications ou en choisir une :
// Keep both changes
console.log("Hello from development branch!");
console.log("Hello from main branch!");
Enregistrez le fichier en appuyant sur Ctrl+O
, puis sur Entrée
, et quittez nano en appuyant sur Ctrl+X
.
Maintenant, préparons et validons le conflit résolu :
git add script.js
git commit -m "Merge development branch and resolve conflict"
Félicitations ! Vous avez réussi à résoudre l'erreur "Your local changes would be overwritten by merge" en utilisant git stash
.