پالت فرمان

دنبال فرمانی برای اجرا بگردید…

ZarynZaryn
میزبانی کد و کنترل نسخه·۴ دقیقه مطالعه·

هر کاری را برگردانید

zev undo آخرین کار شما را برمی‌گرداند، چه کامیت، ادغام، rebase، شاخهٔ پاک‌شده یا add، و هرگز کاری را که جایی ذخیره نشده بازنویسی نمی‌کند. zev op log همهٔ تغییرها را نشان می‌دهد.

زود کامیت کردید، شاخهٔ اشتباهی را ادغام کردید، شاخه‌ای را که لازم داشتید پاک کردید؟ `zev undo` را بنویسید. zev هر دستوری را که مخزن شما را تغییر می‌دهد ثبت می‌کند و undo آخرینش را برمی‌گرداند. دوباره بنویسید تا عقب‌تر بروید. `zev redo` آنچه را undo برداشت سر جایش برمی‌گرداند. ```diagram type: cards title: zev undo چه چیزهایی را برمی‌گرداند --- ✓ | یک کامیت | شاخه عقب می‌رود؛ تغییرهای شما می‌مانند، مرحله‌بندی‌شده و آمادهٔ کامیت دوباره ⑂ | ادغام یا rebase | شاخه و فایل‌هایتان به همان حالت قبل برمی‌گردند 🌿 | شاخهٔ پاک‌شده | روی همان کامیت برمی‌گردد ↪ | جابه‌جایی شاخه | روی شاخه‌ای هستید که بودید، با فایل‌هایش + | zev add یا zev rm | فایل از مرحله‌بندی بیرون می‌آید یا دوباره روی دیسک است ``` ```bash $ zev commit -m "Fix the login page" $ zev undo ↶ Undid #12 zev commit -m "Fix the login page" main 4f2a91c0 → 9b1e07d3 Changed your mind? zev redo $ zev status --brief # main M login.html ``` ## هرگز کار ذخیره‌نشده را دور نمی‌ریزد undo فقط چیزی را عوض می‌کند که آن دستور عوض کرده بود. اگر یکی از آن فایل‌ها ویرایشی دارد که کامیت یا مرحله‌بندی نکرده‌اید، undo می‌ایستد و نام فایل را می‌گوید، تا ویرایش هرگز از دست نرود: ```text Not undone: these files have changes that aren't saved anywhere, and zev undo would overwrite them: f.txt Commit or stash them first (zev stash), or run it again with --force to overwrite them. ``` ویرایش فایل‌هایی که آن دستور عوضشان نکرده بود همان‌طور می‌ماند. برگرداندن یک کامیت اصلاً به فایل‌های شما دست نمی‌زند: تغییرهای آن کامیت دوباره مرحله‌بندی‌شده می‌شوند. ## ویرایش‌هایی که دور ریختید: zev recover بعضی دستورها عمداً ویرایش را دور می‌ریزند: `zev restore <file>` تغییرهای شما در یک فایل را کنار می‌گذارد، و `--force` روی switch، undo یا merge فایل‌ها را بازنویسی می‌کند. پیش از اجرای هرکدام، zev از هر فایلی که محتوایش جایی ذخیره نشده نسخه‌ای نگه می‌دارد. اگر دستور یکی از آن‌ها را عوض یا پاک کند، zev همین را می‌گوید و آن را زیر `zev recover` فهرست می‌کند. اگر چیزی از دست نرفته باشد، چیزی فهرست نمی‌شود. ```bash $ zev restore notes.md Your unsaved edit to notes.md was kept: zev recover 3 brings it back $ zev recover #3 just now before zev restore notes.md on main notes.md $ zev recover 3 restored notes.md ``` `zev recover` هم کار تازه‌تر را بازنویسی نمی‌کند. اگر از آن پس فایل را عوض کرده‌اید، نسخهٔ نگه‌داشته کنارش با نام `notes.md.recovered-3` نوشته می‌شود تا مقایسه‌شان کنید. `--force` به‌جایش بازنویسی می‌کند، و `zev recover 3 --show notes.md` نسخهٔ نگه‌داشته را بی آن‌که چیزی بنویسد چاپ می‌کند. zev دویست تای آخر را نگه می‌دارد و `zev gc` آنچه را لازم دارند نگه می‌دارد. ## همهٔ تغییرها، و برگشتن به هرکدام `zev op log` کارهای zev را از تازه‌ترین فهرست می‌کند، با آنچه هر دستور جابه‌جا کرد: ```text #14 2 min ago zev merge feature main 7c03d1e2 → 2b9f4a10 #13 5 min ago zev branch -d old-idea -old-idea (was 51aa0c3e) #12 9 min ago zev commit -m "Fix the login page" (undone) ``` `zev op restore <n>` مخزن را به حالتی برمی‌گرداند که درست پس از عملیات `n` بود: شاخه‌ها، برچسب‌ها، آنچه مرحله‌بندی شده بود و فایل‌هایتان. این خودش یک عملیات است، پس `zev undo` آن را هم برمی‌گرداند. ```diagram type: history title: undo و redo روی عملیات‌ها جابه‌جا می‌شوند و هیچ‌کدام را پاک نمی‌کنند start: عملیات‌ها --- branch ops | accent commit A ops | #1 zev commit "Start" commit B ops | #2 zev merge feature commit C ops | #3 zev branch -d old | tone bad | info یک اشتباه step zev undo | #3 برگردانده می‌شود: شاخه دوباره هست commit D ops | #4 zev undo (#3) | tone good step zev redo | آن را دوباره برمی‌دارد، تا وقتی کار تازه‌ای نکنید ``` ## برای اسکریپت‌ها و عامل‌های هوش مصنوعی `zev undo`، `zev redo` و `zev op log` مثل دیگر دستورهای روزمره `--json` و `--brief` را می‌پذیرند. یک عامل می‌تواند تغییری را امتحان کند، بسنجد و با یک دستور برگرداند. وقتی فایلی سر راه است، پاسخ داده است، نه جمله: ```bash $ zev undo --json {"error":"files have changes that aren't saved anywhere","code":"unsaved_changes","files":["f.txt"]} ``` ## تفاوتش با Git Git برای هر شاخه یک reflog دارد، اما برگشتن یعنی پیدا کردن مدخل درست و انتخاب میان `git reset --soft`، `--mixed` و `--hard`؛ انتخاب اشتباه کار را دور می‌ریزد. شاخهٔ پاک‌شده، ادغام و rebase هرکدام دستورالعمل جدایی دارند. در zev برای همه‌شان یک دستور است، هرگز کاری را که جایی ذخیره نشده دور نمی‌ریزد، و `zev op log` تاریخچهٔ تغییرهای کل مخزن را یک‌جا نشان می‌دهد. | در Git | در zev | |---|---| | `git reset --soft HEAD~1` (برگرداندن آخرین کامیت) | `zev undo` | | `git reflog`، سپس `git reset --hard HEAD@{2}` (برگرداندن ادغام یا rebase) | `zev undo` | | `git reflog`، سپس `git branch name <hash>` (بازگرداندن شاخهٔ پاک‌شده) | `zev undo` | | `git reflog` | `zev op log` | `zev gc` هر کامیتی را که فهرست عملیات‌ها لازم دارد نگه می‌دارد، پس کامیتی که برگردانده شده همیشه با `zev redo` یا `zev op restore` برمی‌گردد. کامیتی را که می‌خواهید برگردانید push کرده‌اید؟ ممکن است دیگران آن را داشته باشند، پس به‌جایش کامیت تازه‌ای بسازید که آن را خنثی کند: [چطور…؟ › کامیتی را که ساخته‌ام برگردانم](/docs/fa/how-do-i).