Страницы

Поиск по вопросам

вторник, 25 февраля 2020 г.

Почему при переключении веток остаются внесенные изменения?

#git #git_branch


Допустим есть master, где есть какие-то незакоммиченные файлы.
Создаю новую ветку new_branch, переключаюсь на неё, делаю в ней какие-то изменения.
Переключаюсь обратно на master и вижу те же самые изменения в master
Что-то не пойму, так и должно быть? 
Ветка master должна видеть только свои изменения, насколько я понял...    


Ответы

Ответ 1



В тот момент, когда Вы переключаетесь на другую ветку, но не закоммитились (вообще то это очень плохая практика, так не нужно делать), то будет слития (merge) изменений. Соотвественно, когда ещё и в новой ветке сделаете изменения и снова переключитесь, то теперь суммарные изменения будут в master. Хорошая практика говорит, что перед тем, как переключиться на другую ветку, нужно закомитить изменения, спрятать или удалить. Кстати, спрятать изменения - очень хорошая штука. Вначале делаете git stash. git запоминает Ваши изменения в специальном "кармане" и удаляет их из кода. Потом можно переключиться на другую ветку, поработать, закомитить и вернуться в назад. И теперь нужно достать изменения с кармана с помощью git stash pop. Карман работает как стек и туда можно вложить много изменений.

Ответ 2



Похоже, что на тот момент, когда вы переключились обратно на master, вы ещё не сделали ни одного коммита в new_branch. Для Git'a обе ветки совершенно одинаковы, они указывают на один и тот же коммит. При переключении веток не может произойти конфликт, потому что вообще нечего переключать. Поэтому все ваши изменения остаются нетронутыми. Вот этот пример можно скопировать целиком в консоль и посмотреть на результаты. git init; echo 'a'>a; cat a; git add a; git commit -m'a'; git checkout -b new_branch; echo 'b'>a; cat a; git checkout master; cat a; А вот если бы вы сделали из них коммит, тогда ветки бы разошлись и указывали на разные коммиты. Тогда при переключении на master в рабочей области было бы содержимое последнего коммита master. Почти то же самое, но теперь мы сделаем коммит в новой ветке. git init; echo 'a'>a; cat a; git add a; git commit -m'a'; git checkout -b new_branch; echo 'b'>a; cat a; git add a; git commit -m'saved a in new_branch' git checkout master; cat a; Точно также вы можете сначала внести изменения, а потом создать ветку, переключиться на нее и сохранить эти изменения. Например, вы что-то изменили с момента последнего коммита, хотите оставить это как альтернативный путь решения и начать заново. Аналогичный пример: git init; echo 'a'>a; cat a; git add a; git commit -m'a'; echo 'b'>a; cat a; git checkout -b new_branch; git add a; git commit -m'saved a in new_branch' git checkout master; cat a;

Комментариев нет:

Отправить комментарий