Кез келгенін кері қайтар: git, checkpoint және rewind
Жиырма минут бойы өз жобаңды әдейі бұзасың — содан кейін өзгерісті мақұлдау саған ештеңеге түспейтін болады.
агенттің кез келген сәтсіз өзгерісін үш түрлі жолмен кері қайтару және үшеуінің де қолы жетпейтін зиянды атап беру
- Тарихы бар git қалтасы — 02-практикадағы QAIRU Event Sign-up беті немесе кемінде бір commit-і бар кез келген жоба
- Claude Code орнатылған және оған кірілген (01-практика)
- git — PATH-та қолжетімді; Windows-та алдымен Git for Windows орнатып ал
Агентпен жұмыс істегенде адамдардың көбі бір себептен баяулайды: әр мақұлдау бір жақты есік сияқты көрінеді. Олай емес. Жиырма минут бөліп, өз жобаңды әдейі бұз — үш түрлі зиян, үш түрлі қайтар жол — содан кейін есік екі жаққа да ашылатын болады.
Бұл — git сабағы емес. Бұл — жүйке сабағы. Anthropic-тің дерегінше, Claude Code пайдаланушылары рұқсат сұрауларының 93%-ын мақұлдайды, ал нәтижесін былай атайды: «approval fatigue, where people stop paying close attention» — мақұлдаудан шаршау, адамдар мұқият қарауды қояды (Anthropic, 2026 ж. 25 наурыз). Сен де әр diff-ті мәңгі оқып отырмайсың. Сондықтан сені шын қорғайтын дағды — қырағылық емес, қалпына келтіре білу.
Үш қабат және араларынан таңдап беретін жалғыз сұрақ
| Қабат | Нені қайтарады | Неге тимейді | Қайда тересің |
|---|---|---|---|
Rewind — Esc Esc немесе /rewind |
осы сеанста Claude-тың өз өңдеу құралдары өзгерткен файлдарды, қоса әңгіменің өзін | Bash пәрмені тиген нәрсенің бәріне, субагент өңдеулерінің көбіне, өз қолыңмен енгізген өзгерістерге, машинаңнан тыс ештеңеге | Claude Code ішінде, мәзір түрінде |
git restore / git reset --hard |
бақылаудағы файлдарды — соңғы commit-тің күйіне | бақылауда жоқ жаңа файлдарға және commit-ке түсіп қойған нәрсенің бәріне | өз терминалыңда |
git revert |
тарихта тұрған commit-ті — оның дәл керісін жаңа commit етіп жазу арқылы | commit жасалмаған жұмысқа | өз терминалыңда |
Кезексіз жағдайлардың барлығына дерлік бір сұрақ жауап береді: ол commit-ке түсті ме? Түссе — git revert. Түспесе — git restore немесе git reset --hard. Ал бәрі сол бір Claude сеансының ішінде болса әрі тек өңдеу құралдары қатысса, rewind екеуін де басып озады: ол промптыңды енгізу жолына қайтарып береді, сен сөзін түзеп, қайта жібересің.
Rewind — мерзімі бар сеанс ыңғайлылығы. Ал git — құлағанда түсетін еденің. Агентті git білмейтін қалтада ешқашан жұмыс істетпе (checkpoint құжаттамасы).
Үш рет бұз, үш рет қайтар
Екі терезе аш та, сақтау нүктесін жаса
Сол жақ терезе — Claude Code. Оң жақ терезе — сол қалтадағы кәдімгі терминал. Екеуін де практика бойы ашық ұста: агент жұмыс істеп жатқанда репозиторийдің қалай өзгеретінін көзбен көріп отырғаның керек.
cd qairu-event git status git log --onelinegit statusөзгерген бірдеңе көрсетсе, оны дәл қазір сақтап ал. Хабардың әдемі болуы міндет емес.git add -A git commit -m "save point before lab 04"git log --onelineшығарған ең жоғарғы жол — енді сенің бастапқы нүктең. Практиканың қалған бөлігінде не істесең де, бәрі соның үстіне қонады.Сол жақ терезеде агентті manual режимінде іске қос — сонда әр әрекет орындалмай тұрып көрініп тұрады:
claude --permission-mode manualӘдейі бұз да, зиянның commit-ке жетуіне жол бер
Claude-қа шынымен қаламайтын нәрсеңді тапсыр да, нәтижені сақтауына рұқсат бер. Әр қадамды мақұлда.
index.html файлын қайта жаз: барлық тақырып БАС ӘРІППЕН жазылсын, орын есептегішінің орнына "SOON" деген сөз тұрсын, ал тіркелу формасының өрістеріндегі мәтін белгілерін өшір. Содан соң өзгерісті "restyle" деген хабармен commit жаса.Бетті браузерде аш. Нашарлап кетті, ал форма енді экраннан оқу бағдарламасымен келген адамға мүлдем жарамайды. Жақсы.
git log --onelineЕң үстінде жаңа жол тұр:
restyle. Зиян енді тарихыңның ішінде, демек екінші де, үшінші де қабат жарамай қалды.1-кері қайтару — git revert, басқалардың көзінше қауіпсізі
git revert --no-edit HEAD git log --onelineБраузерді жаңарт: бет орнына келді. Бірақ
git logенді бір жол ұзарды, қысқарған жоқ.git revertештеңені өшірген жоқ. Ол нашар commit-ті оқып, оның дәл керісін есептеп шығарды да, сол керісін үстіне жаңа commit етіп сақтады.Қатені өшіре салғаннан гөрі нашар естіледі. Шын мәнінде жақсы: commit-тің көшірмесі біреуде бар болса, тарихты қайта жазу оның клонын бүлдіреді, ал үстіне бір commit қосу ешқашан бүлдірмейді.
--no-editмәтін редакторын ашпай өтеді. Ескілеу commit үшін оның қысқа hash-ын бер:git revert --no-edit <hash>.Тағы бұз — бірақ бұл жолы commit жасатпа
Беттің фонын ашық қызғылт түске ауыстыр, форманың үстіне алып "SOLD OUT!!!" деген баннер қой, сосын өз пайымдауыңды жазып, scratch-notes.md деген жаңа файл жаса. Ештеңені commit жасама.Мақұлда. Енді бір қалтада екі түрлі мәселең бар: бақылаудағы файлдың өзгергені және git бұрын-соңды көрмеген жап-жаңа файлдың пайда болғаны. Екеуіне екі түрлі пәрмен керек — жаңадан бастағандар дәл осы жерде уақыт жоғалтады.
git status git diff --statindex.html— «Changes not staged for commit» бөлімінде.scratch-notes.md— «Untracked files» бөлімінде. Айырмасын есте сақта.2-кері қайтару — commit-ке түспеген былықты лақтырып таста
git restore . git statusindex.htmlтаза. Алscratch-notes.mdәлі сол жерде тұр:git restoregit бұрыннан бақылап отырған нәрсені ғана қалпына келтіреді.Бақылауда жоқ қалдықтарға келгенде — атпас бұрын қарап ал.
-nнені жоятынын тізіп береді де, ештеңеге тимейді.git clean -ndОл тізімде
scratch-notes.mdжалғыз тұруға тиіс. Енді оны шынымен жой: іске асыратын нәрсе —-f.git clean -fd git statusgit restoreпәрменін бір жағдай жеңеді: сен немесе агентgit addорындап қойған болса, нашар өзгеріс дайындау аймағында жатады да,git restore .оны файлдарыңа қайта көшіріп әкеледі. Ол жағдайдың балғасы — бақылаудағы әр файлдың дайындалған да, дайындалмаған да нұсқасын бір-ақ рет лақтырып, бәрін соңғы commit-тің күйіне қайтарады. Қазір орында: жұмыс каталогың бұрыннан таза, сондықтан ештеңе жоғалтпайсың, ал пәрменнің қай жерде тұрғанын біліп қаласың.git reset --hard HEAD git status3-кері қайтару — rewind, git-ке мүлде тимей
Алдымен — кез келген кері қайтарудан бұрын келетін арзандау қимыл: Claude жауап беріп жатқанда
Escпернесін бір рет бас. Ол тоқтайды, ал істеп үлгерген жұмысы сақталып қалады. Қате өзгерістің жартысын түзету — тұтасын түзетуден жеңіл.Енді бетті үшінші рет бұз да, оны сеанстың ішінен қайтарып ал.
Байт үнемдеу үшін index.html ішіндегі әр CSS класының атын бір әріпке ауыстыр. Commit жасама.Мақұлда да, өзің күтіп отыратын файлға не істегенін қарап шық. Енді енгізу жолын бос қалдырып,
Escпернесін екі рет бас (немесе/rewindдеп тер).Промпттарың тізілген мәзір ашылады — кезекті бастайтын әр промпт checkpoint жасайды. Алты таңдау шығады: Restore code and conversation, Restore conversation, Restore code, Summarize from here, Summarize up to here, Never mind.
CSS кластарын қайта атаған промптты таңда да, Restore code and conversation дегенді бас. Файлдар бұрынғы күйіне оралады, ал сол промпт енгізу жолыңда қайта пайда болады — қайта теріп отырмай, сөзін түзейсің. Сыртынан тексер:
git statusЕштеңе өзгермеген. Сен агенттің жұмысын бірде-бір git пәрменін тықпай кері қайтардың.
ТереңірекОтырған сеансыңды жоғалтпай, бір идеяны сынап көр
Rewind сені бір сызықтың бойымен артқа жылжытады. Баламаны сынап көріп, бастапқы әңгімені бүтін қалдыру үшін құжаттама
/branchпәрменін немесеclaude --continue --fork-sessionарқылы қайта бастауды ұсынады: артыңда бір тарих, алдыңда екі болашақ (checkpoint құжаттамасы).Жоқ болып шығатын кері қайтаруды тап
Осы практикадағы ең маңызды қадам, оған тоқсан секунд кетеді.
Өңдеу құралыңмен емес, shell пәрменімен ішінде бүгінгі күн жазылған agent-was-here.txt деген файл жаса. Содан соң тоқта.Bash шақыруын мақұлда. (Claude бәрібір өңдеу құралына жармасса, былай жауап бер:
өңдеу құралыңмен емес, shell пәрменімен орында.)Енді
EscEscбасып, кодты сол промптқа дейінгі күйге қайтар. Сосын оң жақ терезеге қара:git statusagent-was-here.txtәлі орнында тұр. Rewind ештеңені қалпына келтірген жоқ, өйткені checkpoint Claude-тың өңдеу құралдары тиген нәрсені ғана түсіріп алады — Bash пәрмені жасаған, жылжытқан не өшірген файлдарды емес, субагент өңдеулерінің көбін емес, басқа редакторда өз қолыңмен енгізген өзгерістерді емес, машинаңнан шығып кеткен ештеңені емес.Оны өз қолыңмен тазала — бүкіл мәселе де сонда. Алдымен бұрынғыдай құрғақ жүріс:
git clean -ndТізімде бір ғана жол тұр, әрі ол — күткен файлың. Енді шынымен:
git clean -fdТазалықпен аяқта да, ережені жазып қой
git status git log --onelineЖұмыс каталогы таза. Бастапқы нүктеңнің үстінде екі жол: бұзу және оны жоққа шығарған revert. Git қате мен түзетуді әдейі қатар ұстайды. Ал бүгін істеген қалған әрекеттерің еш із қалдырмады.
Соңғы отыз секунд — мұны 03-практикадағы жад файлына тұрақты ережеге айналдыр:
Мынаны CLAUDE.md файлына, бұрыннан бар ережелер бөліміне, бір жолмен қос: екіден көп файлға тиетін кез келген өзгерісті бастамас бұрын тоқта да, алдымен commit жаса деп маған айт.Өңдеуді мақұлда да, CLAUDE.md файлын commit жаса. Келесі аптада сен емес, агент саған еске салады.
Кері қайтаруы жоқ зиян
Үш қабат файлдарыңды жабады. Файлдарыңнан тысқары ештеңені жаппайды.
ТереңірекТым артқа reset жасап, бір commit-тен айырылдың. git reflog-ты байқап көр.
git reflog тармақ ұшының соңғы кездері болған бүкіл орнын тізіп береді — жаңа ғана лақтырып тастағандарын қоса. Қатеден бұрынғы жолды тап, hash-ын көшір де, артқа оралу үшін git reset --hard <hash> орында, немесе алдымен қарап алғың келсе, git checkout -b rescue <hash> деп қауіпсіз жерге қойып қой.
Шегі дәл: reflog тек commit-терді ғана біледі. Commit жасалмаған жұмыс еш жерде жазылмаған, сондықтан оны ештеңе таба алмайды.
Бекітіп қой
Маған бірдеңені кері қайтару керек. Әзірге бірде-бір файлды өзгертпе.
1. `git status` және `git log --oneline -5` орында да, шыққан нәтижені сол күйінде көрсет.
2. Менің жағдайым мыналардың қайсысы екенін айт:
(a) нашар өзгеріс commit-ке түсіп қойған
(b) нашар өзгеріс commit-ке түспеген
(c) екеуі де, оның үстіне мен сұрамаған жаңа файлдар бар
3. Менің жағдайыма қай пәрмендерді қандай ретпен орындау керегін дәл жаз,
әрқайсысы нені біржола жоятынын қоса айт.
4. Мұнда git қалпына келтіре алмайтын нәрсе бар ма, соны айт.
Содан соң тоқта да, күт. Пәрмендерді өзім орындаймын.Осыны сақтап қой. Қалпына келтіруді агентке түсіндіртіп, пәрмендерді өзің теру — бүлдіретін кез келген әрекетке дұрыс еңбек бөлінісі.
Commit-ке түсті ме, түспеді ме, әлде әлі сеанс ішінде ме — қалпына келтіруді таңдап беретін жалғыз сұрақ, әрқайсысына арналған дәл пәрмендер және ешқандай кері қайтару жете алмайтын зиянның қысқа тізімі.
Үш рет әдейі бұзғаннан кейін жобаң қайтадан таза, commit жасалған күйде тұр, әрі rewind ешқашан қайтара алмайтын өзгерістің бір түрін атай аласың.