Git постановка и фиксация между несколькими ветвями

Я совершенно не понимаю мерзавца. Вот что я получаю:

<code>git branch  (outputs that I'm on master)
git checkout -b foo
echo "next line" >> file (file is an existing file)
git add file (stages)
git checkout master
git status (shows that file has "next line" and is staged!!)
git commit (commits the changes that were staged on branch foo!!)
git checkout foo
</code>

Вот кикер. foo теперь не показывает какие-либо изменения, внесенные в файл в рабочем каталоге ИЛИ на стадии.

Похоже, что любые изменения, которые вы вносите, включая изменение файлов и размещение, происходят со ВСЕМИ ветвями. и когда вы передаете COMMIT в определенную ветку, эти изменения отменяются во всех других ветках, кроме той, в которую вы зафиксировали.

Это на самом деле то, что происходит? Может кто-нибудь сделать это имеет смысл для меня? Это звучит как совершенно неаккуратное поведение, и, очевидно, я не понимаю идею дизайна, которая делает это разумным.

Редактировать для явного примера:

<code>$ mkdir element
$ cd element
$ git init
Initialized empty Git repository in /home/dan/element/.git/
$ echo "one" >> one
$ git add one
$ git commit -m msg
[master (root-commit) 36dc8b0] msg
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 one
$ git checkout -b fire
Switched to a new branch 'fire'
$ echo "next line" >> one
$ git checkout master
M       one
Switched to branch 'master'
$ cat one
one
next line
$
</code>

Что явно противоречит этому из книги про git:

This is an important point to remember: Git resets your working directory to look like the snapshot of the commit that the branch you check out points to. It adds, removes, and modifies files automatically to make sure your working copy is what the branch looked like on your last commit to it.

Ответы на вопрос(2)

Ваш ответ на вопрос