Как рабочий каталог обновляется на «git checkout»? - PullRequest
13 голосов
/ 26 октября 2011

Рассмотрим следующую «историю»:

$ mkdir my_project
$ cd my_project
$ git init
Initialized empty Git repository in /home/misha/misha/my_project/.git/

$ echo "first line" > hello.txt
$ git add hello.txt
$ git commit -m "first commit"
[master (root-commit) 9c913a1] first commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 hello.txt

$ git branch new_feature
$ git checkout new_feature
Switched to branch 'new_feature'
$ echo "second line" >> hello.txt
$ cat hello.txt
first line
second line

$ git checkout master
M    hello.txt
Switched to branch 'master'
$ cat hello.txt
first line
second line

Почему hello.txt имеет две линии на ветке master ? (Я думал, что git checkout вернет рабочий каталог в предыдущее состояние, то есть hello.txt будет иметь только одну строку.)

Что на самом деле происходит за кулисами с рабочим каталогом на git checkout? Как оно обновляется?

Ответы [ 2 ]

16 голосов
/ 26 октября 2011

Ваша git checkout для master предотвращает потерю незафиксированных изменений.Вот почему у вас все еще есть вторая строка в вашем файле hello.txt.Если вы действительно хотите потерять свои незафиксированные изменения, вы должны использовать параметр -f.

Наконец, ваш заказ будет выглядеть так:

2 голосов
/ 26 октября 2011

Git checkout (свободно) обновит рабочую копию содержимым репозитория при коммите, в котором указано.В вашей ветке new_feature нет второй строки, которую вы добавили в свой файл (поскольку вы еще не зафиксировали ее).Прямо сейчас эта дополнительная строка является просто неизмененным изменением в вашей рабочей копии, и она будет добавлена ​​в ветку, в которой вы ее зафиксировали.

...