پالت فرمان

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

ZarynZaryn
راهنماها·۳ دقیقه مطالعه

شاخه‌ها و ادغام

روی ایده‌های تازه کار کنید بی‌آنکه به کد اصلی دست بزنید، و بعد آن‌ها را برگردانید. همراه با حل تعارض ادغام، قدم به قدم.

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