Git

Git Stash с именем

Git Stash с именем

Как 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 --oneline
d79f7aa Добавил.текст
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

Лучшие дистрибутивы Linux для игр в 2021 году
Операционная система Linux прошла долгий путь от своего первоначального простого серверного вида. Эта ОС значительно улучшилась за последние годы и те...
Как записать и транслировать игровую сессию в Linux
В прошлом игры считались только хобби, но со временем игровая индустрия увидела огромный рост с точки зрения технологий и количества игроков. Игровая ...
Лучшие игры с отслеживанием рук
Oculus Quest недавно представил отличную идею отслеживания рук без контроллеров. С постоянно растущим числом игр и действий, которые осуществляются фо...