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