Я запутался в поведении git checkout. документация о git checkout гласит:
- объединить
При переключении филиалов, если у вас есть локальные модификации к одному или
больше файлов, которые отличаются между
текущая ветвь и ветвь
которую вы переключаете, команда
отказывается переключать филиалы, чтобы
сохранить ваши модификации в
context. Однако с этой опцией
трехстороннее слияние между текущим
ветвь, ваше рабочее дерево,
и новая ветка готова, а ты
будет на новой ветке.
Но я провел небольшой тест, который не ведет себя так, как сказано в жирной части. То есть:
- Я создаю GIT-репо
- создайте каталог и файл с некоторым содержимым и зафиксируйте его в главной ветке.
- Создать еще одну ветку "testbranch"
- изменить содержимое файла в мастере. Но не совершал.
- переключен на «тестбранк».
- Теперь измененные и неподтвержденные изменения из главной ветви приходят в тестовую ветвь!
Разве не должно было произойти сбой, если у меня есть локальные изменения и я хочу переключиться на ветку?
Ниже приведен список команд для воспроизведения этого поведения:
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
Может кто-нибудь объяснить это?
Ниже вывод моей версии git:
sabya@SABYA-PC e:/test/merge_test (testbranch)
$ git --version
git version 1.7.0.2.msysgit.0