inscenizacja git i zatwierdzanie wielu oddziałów

Wyraźnie nie rozumiem git. Oto co otrzymuję:

<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>

Oto kopacz. foo teraz nie pokazuje żadnych zmian wprowadzonych do pliku w katalogu roboczym LUB wystawionych.

Wygląda więc na to, że wszelkie zmiany, które wprowadzasz, w tym modyfikowanie plików i inscenizacja, zdarzają się WSZYSTKIM oddziałom. a kiedy POBIERASZ do konkretnej gałęzi, zmiany te są odrzucane na wszystkich innych gałęziach, z wyjątkiem tej, na której dokonałeś zatwierdzenia.

Czy to właśnie się dzieje? Czy ktoś może to dla mnie zrobić? Brzmi to jak kompletnie niepokojące zachowanie i najwyraźniej nie rozumiem idei, która sprawia, że ​​jest to rozsądne.

Edytuj dla wyraźnego przykładu:

<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>

Które wyraźnie przeczy temu z książki git pro:

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.

questionAnswers(2)

yourAnswerToTheQuestion