هر کاری را برگردانید
zev undo آخرین کار شما را برمیگرداند، چه کامیت، ادغام، rebase، شاخهٔ پاکشده یا add، و هرگز کاری را که جایی ذخیره نشده بازنویسی نمیکند. zev op log همهٔ تغییرها را نشان میدهد.
دنبال فرمانی برای اجرا بگردید…
zev undo آخرین کار شما را برمیگرداند، چه کامیت، ادغام، rebase، شاخهٔ پاکشده یا add، و هرگز کاری را که جایی ذخیره نشده بازنویسی نمیکند. zev op log همهٔ تغییرها را نشان میدهد.
زود کامیت کردید، شاخهٔ اشتباهی را ادغام کردید، شاخهای را که لازم داشتید پاک کردید؟ zev undo را بنویسید. zev هر دستوری را که مخزن شما را تغییر میدهد ثبت میکند و undo آخرینش را برمیگرداند. دوباره بنویسید تا عقبتر بروید. zev redo آنچه را undo برداشت سر جایش برمیگرداند.
$ 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# mainM login.htmlundo فقط چیزی را عوض میکند که آن دستور عوض کرده بود. اگر یکی از آن فایلها ویرایشی دارد که کامیت یا مرحلهبندی نکردهاید، undo میایستد و نام فایل را میگوید، تا ویرایش هرگز از دست نرود:
Not undone: these files have changes that aren't saved anywhere, and zev undo would overwrite them: f.txtCommit or stash them first (zev stash), or run it again with --force to overwrite them.ویرایش فایلهایی که آن دستور عوضشان نکرده بود همانطور میماند. برگرداندن یک کامیت اصلاً به فایلهای شما دست نمیزند: تغییرهای آن کامیت دوباره مرحلهبندیشده میشوند.
بعضی دستورها عمداً ویرایش را دور میریزند: zev restore <file> تغییرهای شما در یک فایل را کنار میگذارد، و --force روی switch، undo یا merge فایلها را بازنویسی میکند. پیش از اجرای هرکدام، zev از هر فایلی که محتوایش جایی ذخیره نشده نسخهای نگه میدارد. اگر دستور یکی از آنها را عوض یا پاک کند، zev همین را میگوید و آن را زیر zev recover فهرست میکند. اگر چیزی از دست نرفته باشد، چیزی فهرست نمیشود.
$ 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.mdzev recover هم کار تازهتر را بازنویسی نمیکند. اگر از آن پس فایل را عوض کردهاید، نسخهٔ نگهداشته کنارش با نام notes.md.recovered-3 نوشته میشود تا مقایسهشان کنید. --force بهجایش بازنویسی میکند، و zev recover 3 --show notes.md نسخهٔ نگهداشته را بی آنکه چیزی بنویسد چاپ میکند. zev دویست تای آخر را نگه میدارد و zev gc آنچه را لازم دارند نگه میدارد.
zev op log کارهای zev را از تازهترین فهرست میکند، با آنچه هر دستور جابهجا کرد:
#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 آن را هم برمیگرداند.
zev undo، zev redo و zev op log مثل دیگر دستورهای روزمره --json و --brief را میپذیرند. یک عامل میتواند تغییری را امتحان کند، بسنجد و با یک دستور برگرداند. وقتی فایلی سر راه است، پاسخ داده است، نه جمله:
$ zev undo --json{"error":"files have changes that aren't saved anywhere","code":"unsaved_changes","files":["f.txt"]}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 کردهاید؟ ممکن است دیگران آن را داشته باشند، پس بهجایش کامیت تازهای بسازید که آن را خنثی کند: چطور…؟ › کامیتی را که ساختهام برگردانم.