Предыдущий ролик Следующий ролик  

Видео урок: Переключение между бранчами с незакоммиченными изменениями

Git: обучение основам

Теперь мы знаем, как переключаться между бранчами в Git, и мы также знаем, что для этого используется команда checkout, а команда checkout говорит Git, чтобы он пошел и взял последнюю версию бранча, и сделал так, чтобы наша рабочая директория выглядела так же. Но есть кое-что, что вам нужно знать, делая это, а именно - ваша рабочая директория должна быть чистой при переключении. На самом деле, фактически чистой. Мы поговорим об этом позже, но если она не чистая, тогда Git не позволит вам сделать переключение. Давайте посмотрим. Прямо сейчас я нахожусь в бранче shorten_title, пишу git status, вы видите, что моя рабочая директория чиста.

Давайте сделаем изменение. Изменение будет сделано в index.html, открываем его, в той же самой строке, где уже было сделано изменение, я меняю тире на двоеточие. Сохраняю, закрываю. И вот у нас есть изменение, не находящееся в буфере для коммита, а просто существующее в рабочей директории. Давайте попробуем переключиться на мастер-бранч, git checkout master, чищу экран, чтобы было лучше видно. и Git выдает нам ошибку, он говорит, что локальные изменения в следующих файлах будут переписаны при чекауте: index.html. Пожалуйста, закоммитьте ваши изменения или спрячьте их прежде чем переключать бранчи. Не вышло.

Git говорит вам, извините, я не могу этого сделать, потому что если я это сделаю, если я сделаю так, что ваша директория будет выглядеть как мастер-бранч, вы потеряете изменения, которые вы только что сделали. Итак, вместо того, что абсолютно отмести все сделанные изменения, которые вы, возможно, хотите сохранить и вы, возможно, не думали, что это станет проблемой, Git останавливается и предупреждает вас, он говорит, что сперва вам нужно решить эту проблему. Для этого есть три варианта. Во-первых, вы можете избавиться от изменений, сделав чекаут файла. Прописать git status, git checkout и имя файла.

Во-вторых, вы можете закоммитить изменения в текущий бранч. Когда они закоммичены, они уже не потеряются. Они сохранены в Git, мы просто переключаемся между бранчами, а Git переключается между HEAD каждого из этих бранчей. Третья возможность заключается в том, чтобы спрятать изменения, и мы поговорим об этом немного позже. В общем-то, это маленький кармашек, где мы можем что-то спрятать и оставить для будущих времен. Мы можем спрятать их в какой-то маленькой области, а затем вернуть, когда будем готовы. А теперь давайте просто закоммитим это, git commit, и мы используем опцию -a, чтобы добавить и сделать коммит в одно и то же время, а также добавляем сообщение - Swap Out - for : in index.html title.

Итак, мы сделали изменение, теперь мы можем сделать чекаут основного бранча, не проблема. Мы можем сделать чекаут shorten_title, и Git будет переключаться туда и обратно без проблем. Я сказал, что рабочая директория должна быть практически чиста, потому что она не должна быть абсолютно чиста. Она должна быть достаточно чиста, чтобы не возникало конфликтов. Допустим, я вставляю сюда новый файл, tempfile3.txt, просто любой файл. Если я напишу git status, мы увидим, что находимся в бранче shorten_title, а также мы видим, что есть файл tempfile3.txt, который не отслеживается.

Если мы напишем git checkout master, Git скажет - да без проблем, я легко сюда переключусь. Пишем git status, вот мы в основном бранче, а этот файл до сих пор не отслеживается. Вот что я имел в виду, когда говорил, что рабочая директория должна быть практически чиста, у нас не должно быть ничего, что приведет к потере данных при переключении.