Как Git спрятать ваши изменения со связанным именем и найти его впоследствии
Разработчикам часто приходится выполнять несколько задач одновременно. Возможно, вы работаете над новой функцией, и может быть запрос на исправление ошибки. Или вы можете быть ведущим разработчиком нескольких проектов.
Когда вы переключаетесь между задачами, иногда вы не хотите совершать незаконченную работу. В этих случаях отличным подспорьем может стать команда git stash. Это позволяет вам складывать ваши изменения, а затем возвращаться к незавершенной работе, не добавляя ненужных коммитов в ваши репозитории git.
Рабочий процесс для Git Stash
Давайте инициализируем главную ветку git и зафиксируем файл ReadMe.текст.
$ mkdir my_project$ cd my_project /
$ git init
$ touch ReadMe.текст
$ git add -A
$ git commit -m "Инициализировать"
Теперь добавим еще один файл с именем.txt в главную ветку.
$ прикоснитесь к.текст$ git add -A
$ git commit -m "Добавлен.текст"
Если вы проверите историю, вы увидите:
$ git log --onelined79f7aa Добавил.текст
9434d7e Инициализировать
Теперь давайте создадим ветку feature1 и добавим b.txt файл:
$ git branch feature1$ git checkout feature1
$ touch b.текст
$ git add -A
$ git commit -m "Добавлен b.текст"
Откройте свой б.txt в редакторе и вставьте в строку:
Я собираюсь изменить это на…И сохраните файл. Если вы проверите свой статус git, вы увидите следующее:
$ git statusВ ветке feature1
Изменения, не предназначенные для фиксации:
(используйте "git add
(используйте "git checkout --
изменено: b.текст
в фиксацию изменений не добавлено (используйте "git add" и / или "git commit -a")
Допустим, на этом этапе вы получили запрос на обновление файла a.txt в главной ветке. Но вы еще не закончили с б.txt файл. Если вы попытаетесь проверить основную ветку, вы получите следующую ошибку:
$ git checkout masterошибка: ваши локальные изменения в следующих файлах будут перезаписаны при оформлении заказа:
б.текст
Пожалуйста, зафиксируйте свои изменения или спрячьте их, прежде чем вы сможете переключать ветки.
Прерывание
Но вы не хотите совершать незаконченную работу в б.текст. В этой ситуации вы можете использовать git stash:
$ git stashСохраненный рабочий каталог и состояние индекса WIP на feature1: 2cfe39b Добавлено b.текст
HEAD теперь на 2cfe39b Добавлен b.текст
Если вы отметите b.txt, он должен быть пустым:
$ cat b.текст$
Если вы проверите тайник, вы увидите:
$ git список тайниковstash @ 0: WIP на feature1: 2cfe39b Добавлено b.текст
Если вы попытаетесь проверить основную ветку, вы сможете сделать это сейчас:
$ git checkout masterПерешел на ветку master
Предположим, вы внесли необходимые изменения в мастер, а затем вернулись в ветку feature1:
$ git checkout feature1Твой Б.txt все еще пуст:
$ cat b.текст$
Но если вы получите изменения из тайника с помощью следующей команды:
$ git stash применитьВ ветке feature1
Изменения, не предназначенные для фиксации:
(используйте "git add
(используйте "git checkout --
изменено: b.текст
в фиксацию изменений не добавлено (используйте "git add" и / или "git commit -a")
Команда применения stash принимает сохраненные изменения и применяет их к b.txt файл
Вы можете завершить свою работу в б.txt мое изменение строки
К
Теперь продолжайте и зафиксируйте свои изменения:
$ git add -A$ git commit -m "Изменено b.текст"
Применение тайника не очищает его автоматически из тайника. Вы должны очистить его вручную:
$ git stash dropУдалены ссылки / тайник @ 0 (0a66a16b32633e8d564d08e38254c491c1b1d3be)
Почему Git Stash с именем?
Git stash - это стек. Так что вы можете продолжать накапливать свои изменения.
Предположим, вы добавляете «X» к b.txt, припрятать его, добавить букву «Y» в b.txt, спрячьте его и добавьте букву "Z" к b.txt и спрятать его. Если вы проверите историю тайников, вы увидите что-то вроде этого:
$ git список тайников[электронная почта защищена] 0: WIP на feature1: 2d6f515 Изменено b.текст
[электронная почта защищена] 1: WIP на feature1: 2d6f515 Изменено b.текст
[электронная почта защищена] 2: WIP на feature1: 2d6f515 Изменено b.текст
У вас нет возможности узнать, в каком тайнике есть изменения. Когда вы прячете, вы можете использовать опцию сохранения, чтобы оставлять комментарии. Вы можете использовать комментарии, чтобы присвоить имя своему тайнику и сделать его узнаваемым:
$ git stash save "X"Сохраненный рабочий каталог и состояние индекса на feature1: X
ГОЛОВА теперь на 2d6f515 Изменено b.текст
Для добавления модификации «X», «Y» и «Z» вы можете получить следующее в своем тайнике, используя опцию сохранения для каждого тайника:
$ git список тайниковstash @ 0: на feature1: Z
stash @ 1: на feature1: Y
stash @ 2: на feature1: X
Теперь у вас есть имя для каждого внесенного вами изменения. К сожалению, вы не можете использовать это имя для извлечения тайника. Вам нужно будет использовать номер тайника. Предположим, вы хотите получить сдачу на «Y». Вы видите, что [адрес электронной почты защищен] 1 равен Y. Таким образом, вы можете применить это изменение к своей текущей ветке:
$ git stash применить stash @ 1И твой б.txt должен содержать изменения из [email protected] 1.
Вы можете использовать тот же метод, чтобы сбросить тайник. Предположим, вы понимаете, что вам больше не нужен X-тайник. Вы можете просто использовать следующую команду, чтобы удалить этот тайник:
$ git stash drop stash @ 2И тайник должен исчезнуть:
$ git список тайниковstash @ 0: на feature1: Z
stash @ 1: на feature1: Y
Помните, что если вы используете параметры применения и удаления без каких-либо параметров, они будут использовать верхнюю часть стека ([электронная почта защищена] 0).
Заключение
Команда git stash - мощный способ управления рабочим пространством. Освоение этой команды поможет вам работать более эффективно.
Дальнейшее изучение:
- https: // git-scm.com / book / en / v1 / Git-Tools-Stashing
Рекомендации:
Переполнение стека: как назвать и получить тайник по имени в git