Stash: знакомимся со «скрытым» функционалом Git

Перевод статьи «Learn the hidden feature in Git – Stash».

В этой статье мы разберем такую функцию Git, как stash. Начнем с разбора самого термина. Что такое stash? В переводе с английского это слово означает «припрятывать», «тайник», «запас». Применительно к Git смысл слова сохраняется. При помощи команды git stash мы убираем (временно) изменения из рабочей директории, «прячем» их.

Когда имеет смысл использовать git stash и как это делается?

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

Предположим, у нас есть git-репозиторий, а в нем два файла: index.html и feature-1.js.

В той же ветке master в файле feature-2.js ведется работа над новой фичей. Фича еще не готова, вы как раз ею занимаетесь.

Внезапно вам звонит тимлид и сообщает, что в feature 1 есть проблема, блокирующая работу другого члена команды. Вы должны немедленно внести правку, чтобы разблокировать вашего коллегу.

Для этого вам нужно внести изменения в файл feature-1.js, но при этом не запушить feature-2.js (потому что вы еще не закончили работу над feature 2).

Вот здесь вам и пригодится git stash.

В описанной выше ситуации вам нужно проделать следующие шаги.

1. Добавьте файлы, работу над которыми вы еще не закончили, в стейджинг. Это делается при помощи команды git add:

git add feature-2.js

2. При помощи следующей команды уберите эти файлы из рабочей директории в stash:

// при помощи флага -m можно добавлять stash-сообщение.
git stash push -m "feature 2 in progress"

3. После этого запустите команду git stash list, чтобы вывести список содержимого stash. Вы увидите идентификатор вашего «тайника», а также оставленное сообщение. В нашем случае идентификатор – stash@{0}.

stash@{0}: On master: feature 2 in progress

4. Файл feature-2.js станет недоступен в вашем git status, а также в рабочей директории. Теперь вы можете заняться feature-1.js и запушить ваше изменение в удаленный репозиторий.

Отлично!

Вы успешно исправили проблему в файле feature-1.js.

Но как теперь вернуться к работе над feature-2.js?

Извлекаем файлы из stash

Для того, чтобы убрать файлы из рабочей директории в stash, мы использовали команду git stash push. А чтобы вернуть их обратно, используется команда git stash apply. Разберем весь процесс подробно.

1. Запустите команду git stash list, чтобы просмотреть список «тайников» с их идентификаторами. Вы увидите наш тайник с его сообщением.

git stash list
stash@{0}: On master: feature 2 in progress

2. Идентификатор нашего «тайника» – stash@{0}. Чтобы применить изменения из этого «тайника» (т. е. вернуть файлы в рабочую директорию), выполните следующую команду:

git stash apply stash@{0}

3. После выполнения этой команды вы увидите следующий вывод:

On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: feature-2.js

4. В последней строке приведенного лога вы видите, что feature-2.js возвращен из «тайника». Теперь вы можете продолжить работу над feature 2.

Давайте еще раз запустим git stash list.

stash@{0}: On master: feature 2 in progress

Вероятно, вы удивитесь, но «тайник» все еще на месте. Мы вернули файл feature-2.js в рабочую директорию, так почему же он все еще в stash? Дело в том, что «тайник» нужно очистить.

Как очистить stash?

Есть два способа очистить примененный stash.

Можно удалить «тайник» по id. Следующая команда позволит удалить из списка «тайников» (stash list) конкретный stash:

git stash drop stash@{0}

Или можно очистить вообще весь список. Внимание: следующая команда удалит все «тайники» из списка.

git stash clear

Вот и все!


От редакции Techrocks. Под оригинальной статьей было несколько полезных комментариев. Мы решили перевести их тоже.

1. При помощи флага -u (команда git stash -u) можно добавлять в stash неотслеживаемые файлы (т. е. файлы не в стейджинге).

2. При помощи команды git stash pop можно возвращать из stash последний добавленный тайник и одновременно удалять его из стека stash.

А если добавить индекс, можно проделать то же самое для любого «тайника» по вашему выбору (git stash pop stash@{stash_index}).

[customscript]techrocks_custom_after_post_html[/customscript]

[customscript]techrocks_custom_script[/customscript]

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://beverlywoodbakery.com/ deneme bonusugrandpashabetgrandpashabet1winküçükçekmece escorthttps://www.bakirkoyfal.com/kagithane escortatakoy escortatakoy escorthttps://halkaliescortmanken.xyz/eskişehir escorttaraftarium24dumanbetdeneme bonusu veren sitelerkadıköy escortümraniye escortistanbul escortbasaksehir escortşişli escortholiganbethttps://www.escortbayanlariz.net/imajbetmavibetextrabetromabetromabetromabetkartal escorttipobetultrabet twitterportobetcasibommecidiyeköy escorthttps://www.newstrendline.com/deneme bonusu veren casino siteleribatumi escortcasibom girişcasibom güncel girişcasibomholiganbetholiganbetcasibomhttps://vheshop.com/casibombetwooncasibomsahabetbetpark girişmavibet girişsekabet girişnakitbahiszbahisbahiscomotobetbetturkeybets10sheratonbetkalebetcasibomaresbetgrandpashabetbetcioextrabetimajbetmavibetnakitbahismahmutbey escortDeneme Bonusugrandpashabetdeneme bonusu veren sitelergrandpashabetgrandpashabetvaycasinograndpashabetcasino siteleriDeneme Bonusu Veren SitelerAlanya EscortDeneme Bonusu Veren SitelervaycasinonakitbahisGrandpashabetHoliganbetbetgarantiperabetsekabetholiganbet girişcasibombetgarantimariobetsekabet girişcasibombetcio girişvaycasinobetcio girişmavibetbetwoongrandpashabetcasibomcasibom girişdeneme bonusu veren sitelergrandpashabetdeneme bonusu veren sitelerholiganbetbahsegeldeneme bonusu veren sitelereditörbet betparktimebetpadişahbetbettiltkumar sitelerideneme bonusudeneme bonusutürk ifşaHoliganbet girişHoliganbet girişpusulabet1xbetvbetvaycasino girişvaycasino güncel girişbaklavarestbetmarsbahisklasbahisdeneme bonusuvaycasinodeneme bonususdsdgrandpashabetsahabet girişholiganbet girişotobetholiganbet güncel giriş1xbetgrandpashabetcasibom
Прокрутить вверх