125 votes

Pourquoi git continue à montrer mes changements lorsque je change de branche (fichiers modifiés, ajoutés, supprimés), peu importe si je lance git add ou non ?

Je suis vraiment nouveau dans git et j'ai essayé de comprendre pourquoi git continue à montrer ce que j'ai modifié dans une branche dans une autre branche lorsque je lance git checkout pour passer d'une branche à l'autre. J'ai d'abord essayé de ne pas utiliser git add et cela n'a pas fonctionné. J'ai ensuite essayé d'utiliser git add, mais cela n'a pas résolu le problème. Je n'utilise pas encore git commit.

C'est en gros ce que je fais :

$ git clone <a_repository>  
$ git branch  
* master  
$ git branch testing  
$ git checkout testing  
...edit a file, add a new one, delete...  
$ git status  
    # On branch testing  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  
$ git branch  
  master  
* testing  
$ git checkout master  
D       file1.txt  
Switched to branch 'master'  
$ git status  
    # On branch master  
    # Changed but not updated:  
    #   (use "git add/rm <file>..." to update what will be committed)  
    #   (use "git checkout -- <file>..." to discard changes in working directory)  
    #  
    #       deleted:    file1.txt  
    #  
    # Untracked files:  
    #   (use "git add <file>..." to include in what will be committed)  
    #  
    #       file2.txt  
no changes added to commit (use "git add" and/or "git commit -a")  

Je pensais que, lorsque l'on utilise des branches, tout ce que l'on fait dans une branche est invisible pour toutes les autres branches. N'est-ce pas la raison pour laquelle on crée des branches ?

J'ai essayé d'utiliser "git add" mais les changements sont visibles dans les deux branches. Dois-je lancer "git commit" avant de passer d'une branche à l'autre pour éviter cela ?

153voto

Sean Clark Hess Points 3703

Changer de branche emporte les changements non validés avec vous. Soit vous commettez d'abord, exécutez git checkout . pour les annuler, ou lancez git stash avant de commuter. (Vous pouvez récupérer vos modifications avec git stash apply )

0 votes

Merci de votre réponse. Je viens d'essayer d'utiliser git stash / git stash apply mais le nouveau fichier est toujours visible lorsque je passe d'une branche à l'autre.

10 votes

Git stash pop est mieux, à moins que vous ne vouliez construire une énorme pile de stash.

8 votes

@JPZ : git stash ne traite que les fichiers suivis ; les nouveaux fichiers ne sont pas suivis, donc ils ne seront pas stockés.

36voto

Jefromi Points 127932

Réponse courte : oui, vous devez vous engager. Mais assurez-vous de le faire sur la bonne branche !

Une branche est un pointeur vers un commit. Lorsque vous effectuez un commit avec une branche extraite, la branche avance pour pointer vers ce nouveau commit. Lorsque vous extrayez une branche, vous extrayez le commit vers lequel elle pointe. (Vous pouvez considérer les commits comme des instantanés de votre arbre de travail).

Donc, si vous avez des changements que vous n'avez pas commis, ils ne seront pas affectés par le changement de branche. Bien sûr, si le changement de branche est incompatible avec vos modifications, git checkout refusera tout simplement de le faire.

git add est une commande permettant de mettre en place des changements, que vous allez ensuite valider. Elle n'enregistre pas ces changements dans l'historique du référentiel. Elle les place simplement dans une zone de transit (l'index) ; git commit utilise ensuite le contenu de cette zone de transit pour créer des commits.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X