Чому скрипка git не є унікальною для кожної гілки?


81

Я вважаю, що це дозволяє переміщувати зміни з однієї гілки на іншу, але саме для цього призначений збір вишні, і якщо ви не робите коміту щодо своїх змін, можливо, вам не слід їх переміщати?

Я іноді застосовував неправильну скриньку в неправильній гілці, що викликало у мене питання про це.


13
У Git не вистачає чогось, що дозволяє асоціювати незафіксовані зміни з гілкою (або головою). Це стає очевидним, коли у вас незавершене виробництво більше ніж однієї гілки одночасно. Як вказують відповіді тут, сховище, тим не менше, має корисні програми на основі своїх характеристик. git stash-hereхто-небудь?
Blake Taylor

Відповіді:


69

Як вже згадувалося, якщо ви хочете "сховище за гілкою", ви дійсно хочете, щоб нова гілка відщепилася від існуючої гілки.

Крім того, крім уже згаданого факту, що схованка дозволяє вам втягнути гілку, над якою ви працюєте, вона також дозволяє вам міняти гілки до того, як ви все зробили. Це корисно не для збору вишні в звичайному розумінні, а для збору вишні для вашої робочої копії .

F.ex., працюючи над функціональною гілкою, я часто помічаю незначні помилки або косметичні домішки в коді, які не стосуються цієї гілки. Ну, я просто відразу це виправляю. Коли настає час робити комісії, я вибірково здійснюю відповідні зміни, але не виправлення та косметику. Натомість я їх сховую, що дозволяє мені перейти до моєї гілки незначних виправлень-на-стабільному, де потім я можу застосувати схованку та здійснити кожне незначне виправлення окремо. ( В залежності від змін в питанні, я також буду збирати деякі з них ще раз, щоб переключитися на іншу особливість галузі, де застосовуються ті .)

Це дозволяє мені заглибитися в режим програмування, коли я працюю, і не турбуватися про належне бібліотечне обслуговування мого коду. Потім, коли я роблю розумову перерву, я можу повернутися назад і ретельно відсортувати свої зміни на всіх потрібних полицях.

Якби схованка не була загальносвітовою, цей тип робочого процесу було б набагато складніше зробити.


4
Я не згоден з цим: As mentioned, if you want a “per-branch stash,” you really want a new branch forking off from the existing branch.. Зокрема, я часто переключаюся між двома версіями однієї і тієї ж програми, і запуск повної програми makeзаймає 10 хвилин; Було б дуже приємно зберігати побудовані двійкові файли, за гілками. І я, звичайно, не хочу, щоб бінарні файли були в журналі або у гілці.
Клеман

Чому? (Я думаю, ти знаєш, ти просто цього не знаєш.)
Арістотель Пагальціс

21

Починаючи з Git 1.6, тепер ви можете застосовувати схованки до гілок за допомогою

git stash branch name_of_new_branch

Git створить для вас нову гілку і перевірте її! Для отримання додаткової інформації див

  • книга git

  • info git-stashта пошук за опцією = branch.

Я здогадуюсь, ви можете переміщувати схованки за допомогою

git stash branch <branch | new_branch> [<stash>]

а щоб переглянути список схованки, скористайтеся

git stash list

Довідково


Дякую! Я не знав, що ви можете застосовувати схованки до гілок, але, схоже, це все-таки така поведінка. Маючи схованку на одній гілці, я перевірив іншу гілку і зробив там якусь роботу. Як виявилося, мені потрібно було закріпити деякі очікувані зміни ще до того, як я зміг перебазувати дані на майстер. Моє оновлене " gitk --all" більше не відображало моє перше сховання; Я подумав, що це може бути замуровано. Після того, як моя робота у другій гілці була виконана, я тоді викинув цю заначку. Після цього мій оновлений " gitk --all" знову показав оригінальний тайник.
Даніель Міладинов

17

якщо ви хочете "схованку", яка запускається з гілки, зробіть щось подібне, щоб зберегти зміни в новій гілці з вашої поточної гілки.

git checkout -b new_stash
git commit -a -m "stashed changes"

скасувати схованку

git reset HEAD^
git branch -d new_stash

git stash особливо корисний, оскільки ви можете втягнути зміни в брудне дерево, тобто якщо у вас є видатні редагування і ви хочете зробити

git pull

а ви не можете, ви можете сховати внесені зміни, витягнути та застосувати схованку

git stash
git pull
git stash apply
git stash clear

сподіваюся, це допомогло!


Що робити, якщо речі, які ви намагаєтесь сховати, - це, наприклад, купа двійкових файлів, що виникли в результаті запуску makeу цій гілці? (сховання за гілкою заощадить час наступного разу, коли ви зробите інкрементну збірку в цій гілці, але ви, звичайно, не хочете додавати двійкові файли до індексу)
Клемен,

5

git-stash найбільш корисний для мене, щоб перенести ще не зареєстровані зміни в іншу гілку, крім тієї, яка зараз перевірена.

Наприклад - я часто виявляю, що роблю прості зміни у гілці виправлень; лише для того, щоб виявити, що зміни, над якими я працюю, є більш складними, ніж я здогадувався спочатку. Git-stash - це найпростіший спосіб перенести цей набір змін в іншу гілку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.