#git #git_branch
Описание ситуации: есть 3 ветки master-> working_branch-> footer. Состояние ветки footer: $ git status В ветке footer Changes not staged for commit: (используйте "git add..." чтобы обновить данные для закрепления) (используйте "git checkout -- ..." чтобы отменить изменения в рабочей директории) modified: templates/-----/index.php $ git checkout working_branch M templates/gorobar/index.php **////////Что это значит?** Перешел к ветке 'working_branch' $ git status В ветке working_branch Changes not staged for commit: (используйте "git add ..." чтобы обновить данные для закрепления) (используйте "git checkout -- ..." чтобы отменить изменения в рабочей директории) modified: templates/-----/index.php Не закомиченные изменения из ветки footer почему-то отображаются в ветке working_branch!!! Почему?
Ответы
Ответ 1
Все абсолютно правильно. Стандартное поведение для большинства систем контроля версий. Когда Вы переключаете ветку, а у Вас есть незакоммиченные данные (что уже само по себе идеологически неверно), то git (svn, cvs) делают merge изменений. Собственно это Вы и наблюдаете. Поэтому, либо всегда коммите перед переключением, либо пользуйтесь "карманом" - git stash.Ответ 2
Если бы вы сделали git add (добавили вы, то вам предложили бы закоммитить изменения в той ветке, в которой вы находились при переключении, и предупредили, что в противном случае изменения будут утеряны. Раз изменение не staged (как у вас), то git предполагает, что возможно вы хотите его закоммитить в другой ветке. Комитьте в той ветке, где нужно перед переключением, git stash легко забыть, а git log всегда под рукой. Добавить позже новые изменения в последний коммит можно git stash --amend'ом, а отменить коммит, но оставить изменения git reset HEAD~1. Можно и объединять комиты (в том случае, если ещё не пушили их в репозиторий, откуда их кто-то мог забрать). И прочтите же уж книгу, она бесплатная и на русском.
Комментариев нет:
Отправить комментарий