Je suis confus au sujet d'un comportement de git checkout. Le site documentation sur le checkout git dit :
--merge
Lors d'un changement de branche, si vous avez des modifications locales à une ou fichiers qui sont différents entre la branche courante et la branche vers laquelle vers laquelle vous basculez, la commande refuse de changer de branche afin de préserver vos modifications en contexte. Toutefois, avec cette option, un fusion à trois entre l'actuel branche, le contenu de votre arbre de travail et la nouvelle branche est effectuée, et vous serez sur la nouvelle branche.
Mais, j'ai fait un petit test qui ne se comporte pas comme indiqué dans la partie en gras. C'est-à-dire :
- Je crée un dépôt git
- créer un répertoire et un fichier avec un certain contenu et le commiter dans la branche master.
- Créez une autre branche "testbranch
- modifier le contenu du fichier dans la base de données. Mais n'a pas committé.
- est passé à "testbranch".
- Maintenant les changements changés et non changés de la branche master arrivent dans testbranch !
N'était-il pas censé échouer, si j'avais des modifications locales et que je voulais passer à une branche ?
Vous trouverez ci-dessous la liste des commandes permettant de reproduire ce comportement :
sabya@SABYA-PC e:/test/merge_test
$ git init
Initialized empty Git repository in E:/test/merge_test/.git/
sabya@SABYA-PC e:/test/merge_test (master)
$ mkdir src
sabya@SABYA-PC e:/test/merge_test (master)
$ echo "Hello World" > src/a.txt
sabya@SABYA-PC e:/test/merge_test (master)
$ cat src/a.txt
Hello World
sabya@SABYA-PC e:/test/merge_test (master)
$ git add src
sabya@SABYA-PC e:/test/merge_test (master)
$ git commit -m "say hello"
[master (root-commit) 939f6e0] say hello
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 src/a.txt
sabya@SABYA-PC e:/test/merge_test (master)
$ git branch testbranch
sabya@SABYA-PC e:/test/merge_test (master)
$ echo "Changed content" > src/a.txt
sabya@SABYA-PC e:/test/merge_test (master)
$ git status
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: src/a.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
sabya@SABYA-PC e:/test/merge_test (master)
$ git checkout testbranch
M src/a.txt
Switched to branch 'testbranch'
sabya@SABYA-PC e:/test/merge_test (testbranch)
$ cat src/a.txt
Changed content
Quelqu'un peut-il expliquer cela ?
Voici le résultat de ma version git :
sabya@SABYA-PC e:/test/merge_test (testbranch)
$ git --version
git version 1.7.0.2.msysgit.0