Git Stash с именем

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

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

Рабочий процесс для Git Stash

Давайте инициализируем главную ветку git и зафиксируем файл ReadMe.txt.

$ mkdir my_project
$ cd my_project/
$ git init
$ touch ReadMe.txt
$ git add -A
$ git commit -m «Initialize»

Теперь давайте добавим еще один файл с именем a.txt в главную ветку.

$ touch a.txt
$ git add -A
$ git commit -m «Добавлен a.txt»

Если вы проверите историю, вы увидите:

$ git log —oneline
d79f7aa Добавлен a.txt
9434d7e Initialize

Теперь давайте создадим ветку feature1 и добавим файл b.txt:

$ git branch feature1
$ git checkout feature1
$ touch b.txt
$ git add -A
$ git commit -m «Added b.txt»

Откройте файл b.txt в редакторе и вставьте l ine:

Я собираюсь изменить это на …

И сохраните файл. Если вы проверите свой статус git, вы увидите следующее:

$ git status
В ветке feature1
Изменения, не поставленные для фиксации:
(используйте «git add …», чтобы обновить то, что будет зафиксировано)
(используйте «git checkout — …», чтобы отменить изменения в рабочем каталоге)

изменено: b.txt

в фиксацию изменений не добавлено (используйте «git add» и/или «git commit -a»)

Предположим, на этом этапе вы получили запрос на обновление файла a.txt в главной ветке. Но вы еще не закончили с файлом b.txt. Если вы попытаетесь проверить основную ветку, вы получите следующую ошибку:

$ git checkout master
error: ваши локальные изменения в следующих файлах будут перезаписано при оформлении заказа:
b.txt
Пожалуйста, зафиксируйте свои изменения или сохраните их, прежде чем вы сможете переключать ветки.
Прерывание

Но вы не хотите фиксировать незаконченную работу в b.txt. В этой ситуации вы можете использовать git stash:

$ git stash
Сохраненный рабочий каталог и состояние индекса WIP на feature1: 2cfe39b Добавлен b.txt
HEAD теперь находится на 2cfe39b Добавлен b.txt

Если вы отметите b.txt, он должен быть пустым:

$ cat b.txt
$

Если вы проверите тайник, вы увидите:

$ git stash list
stash @ {0}: WIP на feature1: 2cfe39b Добавлен b. txt

Если вы попытаетесь проверить главную ветку, вы сможете это сделать сейчас:

$ git checkout master
Переключился на ветку master

Предположим, вы внесли необходимые изменения в мастер, а затем вернулись в ветку feature1:

$ git checkout feature1

Ваш b.txt все еще пуст:

$ cat b.txt
$

Но если вы получите изменения из тайника с помощью следующей команды:

$ git stash применить

В ветке feature1
Изменения, не поставленные для фиксации:
(используйте «git add …», чтобы обновить то, что будет зафиксировано)
(используйте «git checkout — …», чтобы отменить изменения в рабочем каталоге)

изменено: b.txt

в фиксацию изменений не было добавлено (используйте «git add» и/или «git commit -a»)

Команда stash apply приняла сохраненные изменения и применила их к файлу b.txt
Вы можете завершить свою работу в b.txt, изменив строку

Я собираюсь изменить это на …

На

I я собираюсь изменить это на DONE

Теперь продолжайте и зафиксируйте свои изменения:

$ git add -A
$ git commit -m «Modified b.txt»

Применение тайника не удаляет его автоматически из тайника. Вы должны очистить его вручную:

$ git stash drop
Dropped refs/stash @ {0} (0a66a16b32633e8d564d08e38254c491c1b1d3be)

Почему Git Stash с именем?

Git stash — это стек. Так что вы можете продолжать накапливать свои изменения.

Предположим, вы добавляете «X» в b.txt, сохраняете его, добавляете «Y» в b.txt, сохраняете его и добавляете «Z» в b.txt и спрячьте его. Если вы проверите историю тайников, вы увидите что-то вроде этого:

$ git stash list
[email protected] {0}: WIP on feature1: 2d6f515 Измененный b.txt
[защищен по электронной почте] {1}: WIP на feature1: 2d6f515 Modified b.txt
[email protected] {2}: WIP on feature1: 2d6f515 Modified b.txt

У вас нет возможности узнать, в каком тайнике есть какие изменения. Когда вы прячете, вы можете использовать опцию сохранения, чтобы оставлять комментарии. Вы можете использовать комментарии, чтобы прикрепить имя к своему тайнику и сделать его узнаваемым:

$ git stash save «X»
Сохраненный рабочий каталог и состояние индекса Вкл. feature1: X
HEAD теперь находится на 2d6f515 Modified b.txt

Для добавления изменений «X», «Y» и «Z» вы можете получить следующее в вашем тайнике, используя опцию сохранения для каждого тайника:

$ git stash list
stash @ {0}: On feature1: Z
stash @ {1}: На feature1: Y
stash @ {2}: На feature1: X

Теперь у вас есть имя для каждого внесенного вами изменения. К сожалению, вы не можете использовать это имя для получения тайника. Вам нужно будет использовать номер тайника. Предположим, вы хотите получить сдачу на букву «Y». Вы видите, что [адрес электронной почты защищен] {1} равен Y. Таким образом, вы можете применить это изменение к своей текущей ветке:

$ git stash apply stash @ {1}

И ваш b .txt должен содержать изменения из [email protected] {1}.

Вы можете использовать тот же метод, чтобы удалить тайник. Предположим, вы понимаете, что вам больше не нужен X-тайник. Вы можете просто использовать следующую команду, чтобы удалить этот тайник:

$ git stash drop stash @ {2}

И тайник должен исчезнуть:

$ git stash list
stash @ {0}: On feature1: Z
stash @ {1}: On feature1: Y

Помните, что если вы используете параметры Apply и Drop без каких-либо параметров, они будут использовать верхнюю часть стека ([email protected] {0}).

Заключение

Команда git stash — мощный способ управления рабочим пространством. Освоение этой команды поможет вам работать более эффективно.

Дальнейшее изучение:
  • https://git -scm.com/book/en/v1/Git-Tools-Stashing

Стек Переполнение: как назвать и получить тайник по имени в git

Оцените статью
nanomode.ru
Добавить комментарий