З книги Git SCM :
Часто, коли ви працюєте над частиною свого проекту, речі перебувають у безладному стані, і ви хочете трохи переключити гілки, щоб працювати над чимось іншим. Проблема полягає в тому, що ви не хочете робити зобов’язання за виконану наполовину роботу, щоб пізніше повернутися до цього питання. Відповідь на це питання - команда git stash.
Stashing приймає брудний стан вашого робочого каталогу - тобто ваші змінені відслідковувані файли та поетапні зміни - і зберігає їх у степі незавершених змін, які ви можете будь-коли повторно застосувати.
Враховуючи цей опис, я б сказав, що це анти-візерунок. Надмірно спрощеним поясненням Git Stash було б те, що це "Вирізати та вставити" управління джерелами. Ви берете купу змінених файлів, «зберігаєте» їх у тримаючої ручці поза нормальним робочим процесом розгалуження Git, а потім пізніше застосовуєте ці зміни до іншої гілки.
Повернувшись трохи далі, зобов'язання освоїти - це анти-модель . Використовуйте гілки. Саме для цього вони були розроблені.
Це дійсно зводиться до цього:
Ви можете забити гвинт у стіну, і він буде тримати малюнок, але використання викрутки - це те, що вам слід зробити. Не використовуйте молоток, коли викрутка сидить поруч.
Про вчинення "зламаного" коду
Хоча наступна думка, я прийшов до цієї думки з досвіду.
Робіть зобов’язання рано і виконайте часто. Введіть скільки завгодно зламаного коду. Переглядайте свою локальну історію фіксації як "збереження очок", коли ви щось зловживаєте. Після того, як ви виконали логічний твір, зробіть зобов’язання. Звичайно, це може зламати все, але це не має значення до тих пір, поки ви не підкажете цих зобов'язань. Перш ніж натискати, перезавантажте та зменшіть свої зобов'язання.
- Створіть нову філію
- Рубати рубати
- Вчинити порушений код
- Поліруйте код і змусьте його працювати
- Ввести робочий код
- База і сквош
- Тест
- Натисніть, коли проходять тести
Для ОП цей ланцюжок повідомлень ядра Linux може представляти інтерес, оскільки він звучить так, ніби деякі члени команди ОП використовують Git подібним чином.
@RibaldEddie сказав у коментарі нижче:
Перш за все, сховище не знаходиться поза "розгалуженим робочим процесом", оскільки під кришкою сховище - це ще одна гілка.
(ризикуючи викликати гнів багатьох людей)
Лінус сказав:
За допомогою "git stash" ви також можете мати кілька різних прихованих речей, але вони не стоять на черзі один на одного - це просто випадкові незалежні патчі, які ви приховали, бо в якийсь момент вони були незручними.
Я думаю, що @RibaldEddie намагається сказати, що ви можете використовувати git stash
в робочому процесі функції гілки - і це правда. Не в тому використання git stash
цього. Це поєднання зобов'язань освоїти та використовувати git stash
. Це анти візерунок.
Уточнююча git rebase
З коментаря @ RibaldEddie:
Повторне видання набагато більше схоже на вставку копій і ще гірше модифікує довірену історію.
(Наголос мій)
Змінення історії фіксації не є поганою справою, доки це місцева історія фіксації . Якщо ви перезавантажуєте зобов’язання, які ви вже натиснули, ви, по суті, осиротіли когось іншого, хто використовує вашу філію. Це погано.
А тепер скажіть, що ви зробили кілька комісій протягом дня. Деякі коміти були хорошими. Деякі ... не дуже добре. git rebase
Команда в поєднанні з давлячи ваші коммітов це хороший спосіб , щоб очистити вашу місцеву історію фіксації. Приємно об'єднатись в один комітет для публічних відділень, тому що він зберігає чисту історію спільних філій вашої команди. Після повторного випуску ви хочете протестувати ще раз, але якщо тести пройдуть, ви можете натиснути одну чисту комісію замість кількох брудних.
Є ще одна цікава нитка ядра Linux з чистої історії фіксування .
Знову від Лінуса:
Я хочу чистої історії, але це насправді означає (а) чисту і (б) історію.
Люди можуть (і, мабуть, повинні) відновити свої приватні дерева (власну роботу). Це очищення . Але ніколи інші коди не кодують. Це "знищити історію"
Тож частина історії досить проста. Є лише одне головне правило та одне незначне уточнення:
Ви ніколи не повинні знищувати історію інших народів. Ви не повинні перезавантажувати зобов'язання інших людей. В основному, якщо на ній не вказано ваш вихід, він вийшов за межі: ви не можете його переосмислити, оскільки це не ваше.
Зауважте, що мова йде про історію інших народів , а не про код інших народів . Якщо вони надіслали вам матеріал як патч електронної пошти, а ви застосували його за допомогою "git am -s", то це їх код, але це
ваша історія.
Таким чином, ви можете дивитися на "git rebase" річ на ньому, навіть якщо ви не написали код, якщо сама комісія є вашою приватною.
Незначні роз’яснення до правила: після того як ви опублікували свою історію на якомусь загальнодоступному веб-сайті, інші люди можуть використовувати її, і тепер явно вже не ваша приватна історія.
Отже, незначне уточнення насправді полягає в тому, що справа не лише в тому, що ви "займаєтеся", це також про те, щоб він був приватним для вашого дерева, і ви ще не висунули його і не оголосили.
...
Тепер "чиста" частина трохи тонкіша, хоча перші правила є досить очевидними та простими:
Тримайте читати власну історію
Деякі люди роблять це, просто спочатку опрацьовуючи речі в голові і не роблячи помилок. але це дуже рідко, і для решти з нас ми використовуємо "git rebase" тощо, працюючи над своїми проблемами.
Тож "git rebase" не є помилковим. Але це правильно лише в тому випадку, якщо це ВАШЕ ДУЖЕ ПРИВАТНЕ дерево git.
Не піддавай своє лайно.
Це означає: якщо ви все ще знаходитесь у фазі "git rebase", ви не виштовхуєте її. Якщо це не готово, ви надсилаєте патчі навколо або використовуєте приватні дерева git (як "заміна серії патчів"), про які взагалі не повідомляєте публіці.
(наголос мій)
Висновок
Зрештою, в ОП є такі розробники:
git checkout master
(edit files)
git commit -am "..."
(edit files)
git stash
git pull
git stash (pop|apply)
Тут є дві проблеми:
- Розробники зобов’язуються освоїти. Блокуйте це негайно. Дійсно, це найбільша проблема.
- Розробники постійно використовуючи
git stash
і git pull
на майстра , коли вони повинні використовувати повнометражну гілка.
Немає нічого поганого в використанні git stash
- особливо перед витягненням - але використання git stash
цього способу є анти-схемою, коли в Git є кращі робочі процеси.
Їх використання git stash
червоної оселедця. Це не проблема. Зобов'язання опанувати - проблема.