3 votes

Confusion au sujet de git checkout

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 :

  1. Je crée un dépôt git
  2. créer un répertoire et un fichier avec un certain contenu et le commiter dans la branche master.
  3. Créez une autre branche "testbranch
  4. modifier le contenu du fichier dans la base de données. Mais n'a pas committé.
  5. est passé à "testbranch".
  6. 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

5voto

dmedvinsky Points 3345

La clé est " la différence entre la branche actuelle et la branche vers laquelle vous passez "

Si vous modifiez le fichier dans la branche, que vous le livrez, que vous extrayez une autre branche, que vous commencez à modifier le même fichier dans cette branche, et que vous extrayez à nouveau la première branche, sans livrer le fichier, l'extraction échouera.

Exemple

git init
vim file
# hack hack hack
git add .
git commit -m "1"
git checkout -b branch
vim file
# hack hack hack
git commit -a -m "2"
git checkout master
vim file
# hack hack hack
git checkout branch

Ici, vous devez avoir une erreur.

3voto

Josh K Points 11621

Vous n'avez pas commité le fichier modifié sur master, donc lorsque vous vérifiez la nouvelle branche, il est déplacé avec lui sur la nouvelle branche. La clé est dans cette ligne

sabya@SABYA-PC e:/test/merge_test (master)
$ git checkout testbranch
M       src/a.txt
Switched to branch 'testbranch'

Remarquez comment il est dit M src/a.txt ? Le site M représente le fichier modifié.

Valider les changements dans master avant de vérifier une autre branche.

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