Git Checkout эксперимент иногда разрешен, а иногда нет, если у меня есть локальные изменения - PullRequest
1 голос
/ 26 марта 2010

У меня есть ветка под названием эксперимент.

git checkout master
echo 'some changes' > a.txt
# now master branch has local changes which are not committed
git checkout experiment

Иногда я замечал, что мне не разрешено переключаться на другую ветку, если у меня есть локальные изменения. И иногда мне разрешено переключаться на другую ветку, если у меня есть локальные изменения.

Чего мне не хватает?

Ответы [ 2 ]

4 голосов
/ 26 марта 2010

Выдержка из справочной страницы git checkout:

При переключении ветвей, если у вас есть локальные модификации одного или нескольких файлов, которые отличаются между текущей веткой и ветвью, на которую вы переключаетесь, команда отказывается переключать ветки, чтобы сохранить ваши изменения в контексте.

Итак, если изменения не имеют никакого отношения к различиям между ветвями (как в вашем примере), это позволит вам переключиться. Если разница между ветвями изменяет тот же файл, что и у вас, он откажется - но вы можете указать опцию -m, чтобы заставить его выполнить трехстороннее объединение между текущей веткой, рабочим деревом и новой веткой (вот где этот фрагмент из).

Чтобы сделать это описание немного более полным: предположим, что разница между мастером и экспериментом есть только в файлах A, B и C. Если вы измените A в своем рабочем дереве, вы не сможете проверить другую ветвь. , Однако, если вы измените D, вы можете просто проверить.

0 голосов
/ 26 марта 2010

Я не совсем уверен, как Git делает это, но он пытается предотвратить случайную перезапись незафиксированных изменений. Я думаю, что если он решит, что вы можете получить конфликт, он этого не допустит ...

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