Недетерминированное поведение c проверки git - PullRequest
0 голосов
/ 25 мая 2020

Я пытаюсь понять поведение git. Это связано с удалением файла и сохранением фиксации.

Предположим, я работаю в ветке с именем fork1 в последний момент. Я добираюсь туда, выполняя «git checkout fork1». Затем я удаляю файл с именем first.b sh. (Не git rm, просто rm). Если я сделаю «git checkout fork1», появится сообщение:

Already on 'fork1'
D       first.bsh

с указанием, что файл отсутствует. Он не восстанавливается, несмотря на оформление заказа.

Затем я выполняю "master checkout", а затем "checkout fork1". На этом этапе файл восстановлен. Похоже, что порядок команд влияет на то, что делает "checkout fork1". Это удивительно и не кажется желательным поведением. Это своего рода "уважение" к моему удалению в одном случае, но не в другом. Что за здесь лог c?

1 Ответ

1 голос
/ 26 мая 2020

Когда вы меняете активную фиксацию с помощью git checkout: git будет пытаться согласовать ваши локальные изменения с разницей «старый HEAD <-> new HEAD».

Если в ваших локальных модификациях указано «файл first.bsh удален », а файл first.bsh не существует на master, git скажет:« Эй! Мы в порядке! » и старательно переместите активную фиксацию в мастер.

Разница в поведении заключается между изменением активных коммитов - стратегия «держать отложенные изменения» - это эвристическая c и может быть с потерями - и оставаться на месте .


Самая безопасная ставка - завершить свою работу или запустить git stash перед переключением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...