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

Видео урок: Получение изменений из копилки

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

Мы поговорили о том, как использовать git stash, чтобы временно сохранять наши изменения. Мы можем отправлять изменения в копилку и просматривать их, а также мы видели, как использовать show, чтобы проверять их. Теперь мы хотим иметь возможность получать эти изменения из копилки, в частности, это противоположность git stash save. До этого мы отправили их в копилку, а теперь мы хотим их оттуда забрать, а когда мы это сделаем, данные изменения вернуться обратно в рабочую директорию, независимо от того, чем является рабочая директория, и независимо от того, в каком бранче мы находимся. Помните, когда я отправил изменения в копилку, я был в бранче shorten_title, теперь я нахожусь в основном бранче.

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

Есть две команды, которые позволяют достать элементы из копилки. Первой является git stash pop, а второй - git stash apply, и обе эти команды заберут то, что находится в копилке, и отправят это в рабочую директорию. Разница заключается в том, что stash pop также удаляет изменения из копилки. Команда git stash apply оставляет в ней копию, а вот stash pop просто забирает изменения, ничего не оставляя в копилке.

Мы просто забираем их из копилки и отправляем в рабочую директорию. Это полная противоположность git stash save. git stash apply забирает информацию из копилки в рабочую директорию, но оставляет в копилке копию. Суть заключается в том, что у нас может быть изменение, которое мы хотим применить там, где мы сейчас находимся, потом мы можем переключиться на другой бранч и применить его там, переключиться на следующий бранч и там его применить. То есть, мы хотим сохранить эти изменения в копилке, пока перемещаемся по бранчам. А, возможно, есть что-то, что мы хотим применить сейчас, затем сделать несколько коммитов и применить это снова, и так далее.

В большинстве случаев вы будете использовать git pop, и эту команду мы здесь и изучим. После git pop мне нужно указать, какой именно элемент я хочу вытянуть. Если мы этого не сделаем, то по умолчанию Git вытащит первый элемент, а конкретнее, вот этот. Я записываю это вот сюда. Итак, если мы ничего не напишем, Git вытянет то же самое. Все будет точно таким же, как stash @, фигурные скобки с нулем внутри. Если бы у нас было три элемента, и мы захотели забрать третий, тогда бы мы написали git stash, а затем 2, 2 потому что третий элемент идет под номером 2, поскольку нумерация начинается с 0; 0, 1 и 2.

Но в данном случае я хочу получить первый элемент. Итак, я его забираю, авто-слияние mission.html, изменения не отправлены в буфер для коммита, это обозначает, что они находятся в рабочей директории, Git вытянул их из копилки прямо сюда. Если мы сейчас напишем git stash list, вы увидите, что этого элемента больше здесь нет. А если мы посмотрим на этот файл, mission, вы увидите, что в нем есть "Our Mission", это то изменение, что мы сделали. Мы можем снова отправить это изменение в копилку, если захотим. Мы можем сказать, что не хотим находиться в этом бранче, тогда мы можем написать git stash save, а затем сохранить "change to mission page title". Тогда изменение будет снова сохранено в копилке, git checkout, мы делаем чекаут нашего бранча shorten_title. git status, ничего нет, git stash, и в этот раз давайте пропишем apply, и мы не будет конкретизировать, к чему это применять, тогда Git даст нам самое первое изменение.

Прописываем list и видим, что оно есть в копилке. Если мы в этот раз пропишем apply, то в этот раз все равно произойдет авто-слияние, но если посмотреть в копилку, вы увидите, что изменение находится тут. Оно не было удалено. На данный момент вы можете просто оставить изменения, которые мы внесли в mission.html, в рабочей директории. Сейчас мы не будем их коммитить. Далее мы рассмотрим, как можно удалять элементы из копилки. В частности, мы рассмотрим, как удалять элементы, которые мы в ней оставили.