Разные ветви разделяют один индексный файл? - PullRequest
0 голосов
/ 11 июля 2019

Я запутался в сценарии ниже

git init  (command 0)
Initialized empty Git repository in a path;

echo line1 >a (command 1)
git add a  (command 2)`

git commit -m 'first commit' (command 3)
1 file changed, 1 insertion(+)
create mode 100644 a

git branch b (command 4)
echo line2 >>a (command 5)

git checkout b  (command 6)
Switched to branch 'b'

git status (command 7)
Changes not staged for commit

git checkout master (command 8)
Switched to branch 'master'

git add a  (command 9)
git status (command 10)
Changes to be committed

git checkout b  (command 11)
Switched to branch 'b'

git status  (command 12)
Changes to be committed:

Q1: поскольку ветвь b была создана после коммита, поэтому начальный репозиторий b должен содержать файл 'a', после переключения на b рабочий каталогдолжен быть инициализирован с последним коммитом на ветке b.но файл a в рабочем каталоге не изменился (все еще содержит 2 строки), это какой-то механизм предотвращения потерянных изменений?

Q2: после команды 8 текущая ветвь должна быть master, file 'Затем a 'добавляется к индексу, а затем возвращается обратно к ветви b, в это время возвращается состояние git (изменения должны быть зафиксированы).но я добавил файл 'a' в основную ветку, почему я могу отправить его в другую ветку?И меня немного смущает, как индексный файл изменяется (или не изменяется), когда оформляются ветви

Заранее спасибо!

1 Ответ

1 голос
/ 11 июля 2019

Понимание: после добавления второй строки в файл, вы ничего не зафиксировали .Сказав, что

Хорошо ... git пытается сохранить ваши незафиксированные изменения, если вы не заставите их их потерять.Это даже помешает вам делать что-то, чтобы вы не потеряли свои изменения.

Между командами 5 и 6 вы не зафиксировали изменения в файле, на самом деле, этодаже не по индексу.Команда 6 переключается на b, и эта ревизия указывает на ту же ревизию, на которой вы стоите, так что git «хорошо», переходя к b.Вы по-прежнему можете хранить файл в неизменном состоянии.

В команде 8 вы переключаете back на master, а git говорит «конечно» (вы не переходите к другой ревизии, поэтому вывсе в порядке).

Команда 11, файл, наконец, находится в стадии ... но опять же не перемещается из текущей ревизии, так что все в порядке.

Хотите увидеть, как git мешает вам двигатьсяиногда?Зафиксируйте прямо сейчас (на ветке b) и затем сделайте следующее:

git branch c master
git checkout c
echo hello > a
git checkout b # and here git should keep you from moving.
...