شاخهها و ادغام
روی ایدههای تازه کار کنید بیآنکه به کد اصلی دست بزنید، و بعد آنها را برگردانید. همراه با حل تعارض ادغام، قدم به قدم.
دنبال فرمانی برای اجرا بگردید…
روی ایدههای تازه کار کنید بیآنکه به کد اصلی دست بزنید، و بعد آنها را برگردانید. همراه با حل تعارض ادغام، قدم به قدم.
شاخه یک رشته از کامیتهاست که نام دارد. هر مخزن با یک شاخه به نام main شروع میشود. وقتی شاخهٔ تازهای میسازید، از کامیتی که روی آن هستید شروع میشود و از آن به بعد کامیتهایش جدا از main است.
همین، شاخهها را راهِ امنِ امتحان کردن میکند:
main خراب شودmain، آن را در یک درخواست ادغام بررسی کنندmain: A ── B ── C \new-search: D ── Eاینجا new-search از C شروع شده و دو کامیت از خودش دارد. main تا وقتی ادغام نکنید D و E را ندارد.
zev checkout -b new-searchاین دستور شاخهٔ new-search را در کامیت فعلی میسازد و به آن میرود. تغییرات کامیتنشدهتان همراهتان میآیند. حالا مثل همیشه کامیت کنید؛ کامیتها روی new-search میروند:
zev add .zev commit -m "جعبهٔ جستوجو، نسخهٔ اول"دیدن همهٔ شاخهها؛ شاخهای که * دارد همان جایی است که هستید:
zev branch main* new-searchzev checkout mainzev فایلهایتان را مطابق شاخه میکند: فایلهایی که فقط در شاخهٔ دیگر هستند ناپدید میشوند و وقتی برگردید دوباره میآیند. چیزی از دست نمیرود؛ همه در تاریخچه است.
اگر تغییرات کامیتنشدهای دارید که جابهجایی بازنویسیشان میکرد، zev متوقف میشود و میگوید کدام فایل. سه راه دارید:
zev commit -m "کار نیمهتمام" # ۱. روی همین شاخه کامیتشان کنیدzev stash # ۲. کنارشان بگذارید (بعداً zev stash pop)zev checkout --force main # ۳. دورشان بریزیدوقتی کار روی new-search آماده شد، به main بروید و ادغام کنید:
zev checkout mainzev merge new-searchاگر main از زمان شروع شاخه تغییری نکرده باشد، zev بهسادگی main را جلو میبرد تا کامیتهای شاخه را شامل شود (به این fast-forward میگویند). اگر هر دو کامیت تازه داشته باشند، zev آنها را فایل به فایل و خط به خط ترکیب میکند. وقتی دو طرف خطهای متفاوتی را تغییر داده باشند، این کار خودبهخود انجام میشود.
در کار تیمی، روش معمول درخواست ادغام است: شاخه را push کنید و zev pr را بزنید تا دیگران اول بررسیاش کنند. همکاری از طریق ترمینال را ببینید.
اگر main و شاخهٔ شما همان خطهای یک فایل را تغییر داده باشند، zev نمیتواند بداند کدام نسخه را میخواهید. پیش از تغییر هر چیزی متوقف میشود:
Can't bring 'new-search' in automatically: your commit "Tweak header" and 'new-search' changed the same lines of: index.htmlNothing was changed. To combine them by hand, run: zev merge new-search --resolveروش ترکیب دستی آنها این است. به این کار حل تعارض (resolve conflict) میگویند.
۱. حل را شروع کنید:
zev merge new-search --resolve۲. هر فایلی را که فهرست کرده باز کنید. zev جاهایی را که هر دو تغییر دادهاند علامت زده است:
<h1><<<<<<< mainWelcome to my site=======Welcome! Search below>>>>>>> new-search</h1>بخش بین <<<<<<< و ======= یک نسخه است و بخش بین ======= و >>>>>>> نسخهٔ دیگر.
۳. آن را به چیزی که باید باشد ویرایش کنید. یک طرف، طرف دیگر، یا ترکیبی از هر دو را نگه دارید و سه خط علامت را پاک کنید:
<h1>Welcome! Search below</h1>۴. فایلها را مرحلهبندی کنید و تمامش کنید:
zev add index.htmlzev merge --continueوسط کار پشیمان شدید؟ zev merge --abort همهچیز را به حالت پیش از گام ۱ برمیگرداند.
نکته: وقتی زیاد ادغام کنید، تعارضها کوچکتر و کمتر میشوند. به جای یک بار در آخر، مرتب
zev pullبزنید وmainرا در شاخهٔ خودتان ادغام کنید.
zev branch -d new-searchاین فقط نام را حذف میکند. کامیتهایی که در شاخهٔ دیگری ادغام شدهاند در تاریخچهٔ آن میمانند.
شاخه را مثل هر چیز دیگری push کنید:
zev push origin new-searchوقتی روی همان شاخه هستید، zev push ساده همین کار را میکند. دیگران با zev pull origin new-search، یا با کلون کردن همراه --branch new-search، آن را میگیرند.