GIT-MERGE(1) Git Manual GIT-MERGE(1) نام (NAME) git-merge - ادغام دو یا چند تاریخچه توسعه با یکدیگر خلاصه دستور (SYNOPSIS) git merge [-n] [--stat] [--compact-summary] [--no-commit] [--squash] [--[no-]edit] [--no-verify] [-s ] [-X ] [-S[]] [--[no-]allow-unrelated-histories] [--[no-]rerere-autoupdate] [-m ] [-F ] [--into-name ] [...] git merge (--continue | --abort | --quit) توضیحات (DESCRIPTION) تغییرات مربوط به کامیت‌های نام‌برده‌شده (از زمانی که تاریخچه آن‌ها از شاخه جاری منشعب شد) را در شاخه جاری ادغام می‌کند. این دستور توسط git pull برای اعمال تغییرات از یک مخزن دیگر استفاده می‌شود و همچنین می‌توان از آن به‌صورت دستی برای ادغام تغییرات از یک شاخه به شاخه دیگر استفاده کرد. فرض کنید تاریخچه زیر وجود دارد و شاخه جاری master است: A---B---C topic / D---E---F---G master سپس دستور git merge topic تغییرات ایجادشده در شاخه topic از زمان انشعاب آن از master (یعنی E) تا کامیت جاری آن (C) را بر روی master بازپخش می‌کند و نتیجه را در یک کامیت جدید به همراه نام دو کامیت والد و یک پیام گزارش از کاربر که تغییرات را توصیف می‌کند ثبت می‌نماید. پیش از این عملیات، ORIG_HEAD روی نوک شاخه جاری (G) تنظیم می‌شود. A---B---C topic / \ D---E---F---G---H master اگر تعارضی وجود داشته باشد که نتوان آن را به‌صورت خودکار حل‌وفصل کرد یا اگر هنگام آغاز ادغام گزینه --no-commit مشخص شده باشد، عملیات ادغام متوقف می‌شود. در آن نقطه می‌توانید git merge --abort یا git merge --continue را اجرا کنید. دستور git merge --abort فرایند ادغام را لغو کرده و تلاش می‌کند وضعیت پیش از ادغام را بازسازی کند. با این حال، اگر هنگام آغاز ادغام تغییرات ثبت‌نشده‌ای وجود داشته باشد (و به‌ویژه اگر آن تغییرات پس از آغاز ادغام بیشتر دستکاری شده باشند)، در برخی موارد git merge --abort قادر به بازسازی تغییرات اولیه (پیش از ادغام) نخواهد بود. بنابراین: هشدار اجرای git merge همراه با تغییرات ثبت‌نشدهٔ مهم توصیه نمی‌شود: هرچند این کار امکان‌پذیر است، اما در صورت بروز تعارض ممکن است شما را در وضعیتی قرار دهد که بازگشت از آن دشوار باشد. گزینه‌ها (OPTIONS) --commit, --no-commit ادغام را انجام داده و نتیجه را کامیت می‌کند. از این گزینه می‌توان برای لغو اثر --no-commit استفاده کرد. با --no-commit ادغام را انجام داده و درست پیش از ایجاد کامیت ادغام متوقف می‌شود، تا به کاربر فرصت بازبینی و اصلاح بیشتر نتیجه ادغام پیش از کامیت کردن داده شود. توجه داشته باشید که به‌روزرسانی‌های فست‌فوروارد (fast-forward) کامیت ادغام ایجاد نمی‌کنند و بنابراین راهی برای متوقف کردن این ادغام‌ها با --no-commit وجود ندارد. از این رو، اگر می‌خواهید مطمئن شوید که شاخه شما توسط دستور ادغام تغییر نکرده یا به‌روزرسانی نمی‌شود، از --no-ff همراه با --no-commit استفاده کنید. --edit, -e, --no-edit پیش از کامیت کردن یک ادغام مکانیکی موفق، ویرایشگری را فراخوانی می‌کند تا پیام ادغام تولیدشده به‌طور خودکار ویرایش شود، تا کاربر بتواند ادغام را توضیح داده و توجیه کند. گزینه --no-edit می‌تواند برای پذیرش پیام تولیدشده به‌طور خودکار استفاده شود (این کار عموماً توصیه نمی‌شود). گزینه --edit (یا -e) همچنان زمانی کاربرد دارد که یک پیام پیش‌نویس را با گزینه -m از خط فرمان داده باشید و بخواهید آن را در ویرایشگر ویرایش کنید. اسکریپت‌های قدیمی‌تر ممکن است به رفتار تاریخی عدم اجازه به کاربر برای ویرایش پیام لاگ ادغام وابسته باشند. آن‌ها هنگام اجرای git merge باز شدن یک ویرایشگر را مشاهده خواهند کرد. برای آسان‌تر کردن تطبیق چنین اسکریپت‌هایی با رفتار به‌روزرسانی‌شده، متغیر محیطی GIT_MERGE_AUTOEDIT می‌تواند در ابتدای آن‌ها روی no تنظیم شود. --cleanup= این گزینه تعیین می‌کند که پیام ادغام پیش از کامیت چگونه پاک‌سازی شود. برای جزئیات بیشتر git-commit(1) را ببینید. علاوه بر این، اگر به مقدار scissors داده شود، در صورت بروز تداخل ادغام، خط قیچی (scissors) پیش از ارسال به سازوکار کامیت به MERGE_MSG اضافه خواهد شد. --ff, --no-ff, --ff-only مشخص می‌کند در صورتی که تاریخچه ادغام‌شده از قبل از نوادگان تاریخچه کنونی باشد، ادغام چگونه مدیریت شود. --ff حالت پیش‌فرض است مگر اینکه یک برچسب (tag) دارای یادداشت (و احتمالاً امضاشده) ادغام شود که در جایگاه طبیعی خود در سلسله‌مراتب refs/tags/ ذخیره نشده است، که در این حالت --no-ff فرض می‌شود. با --ff، در صورت امکان، ادغام را به‌صورت فست‌فوروارد حل می‌کند (تنها اشاره‌گر شاخه را مطابق با شاخه ادغام‌شده به‌روزرسانی می‌کند؛ کامیت ادغام ایجاد نمی‌کند). در صورت عدم امکان (زمانی که تاریخچه ادغام‌شده از نوادگان تاریخچه کنونی نباشد)، یک کامیت ادغام ایجاد می‌کند. با --no-ff، در تمام موارد یک کامیت ادغام ایجاد می‌کند، حتی زمانی که ادغام می‌توانست در عوض به‌صورت فست‌فوروارد حل شود. با --ff-only، در صورت امکان ادغام را به‌صورت فست‌فوروارد حل می‌کند. در صورت عدم امکان، از ادغام امتناع کرده و با وضعیت غیرصفر خارج می‌شود. -S[], --gpg-sign[=], --no-gpg-sign کامیت ادغام حاصل را با GPG امضا می‌کند. آرگومان اختیاری است و پیش‌فرض آن هویت کامیت‌کننده است؛ در صورت تعیین، باید بدون فاصله به گزینه متصل باشد. --no-gpg-sign برای باطل کردن هم متغیر پیکربندی commit.gpgSign و هم گزینه قبلی --gpg-sign مفید است. --log[=], --no-log علاوه بر نام شاخه‌ها، پیام لاگ را با توضیحات یک‌خطی از حداکثر کامیت واقعی که در حال ادغام هستند پر می‌کند. همچنین git-fmt-merge- msg(1) را ببینید. با --no-log توضیحات یک‌خطی کامیت‌های واقعی در حال ادغام را فهرست نمی‌کند. --signoff, --no-signoff یک دنباله (trailer) Signed-off-by توسط کامیت‌کننده در انتهای پیام لاگ کامیت اضافه می‌کند. معنای signoff به پروژه‌ای که در آن کامیت می‌کنید بستگی دارد. برای مثال، ممکن است گواهی دهد که کامیت‌کننده حق ارسال اثر تحت پروانه پروژه را دارد یا با برخی از بیانیه‌های مشارکت‌کنندگان، مانند «گواهی مبدا توسعه‌دهنده» (Developer Certificate of Origin) موافقت می‌کند. (برای نمونه مورد استفاده توسط هسته لینوکس و پروژه‌های گیت، https://developercertificate.org را ببینید.) برای درک نحوه استفاده از signoffها در پروژه‌ای که در آن مشارکت می‌کنید، با مستندات یا راهبری آن پروژه مشورت کنید. گزینه --no-signoff می‌تواند برای باطل کردن گزینه قبلی --signoff در خط فرمان استفاده شود. گیت یک متغیر پیکربندی برای فعال کردن گزینه خط فرمان --signoff به صورت پیش‌فرض ندارد (و نخواهد داشت)؛ برای جزئیات بیشتر ورودی commit.signoff را در gitfaq(7) ببینید. --stat, -n, --no-stat یک diffstat در پایان ادغام نمایش می‌دهد. این diffstat همچنین توسط گزینه پیکربندی merge.stat کنترل می‌شود. با -n یا --no-stat در پایان ادغام diffstat نشان داده نمی‌شود. --compact-summary یک خلاصه فشرده (compact-summary) در پایان ادغام نمایش می‌دهد. --squash, --no-squash وضعیت درخت کاری و نمایه را به‌گونه‌ای ایجاد می‌کند که گویی یک ادغام واقعی رخ داده است (به‌جز اطلاعات ادغام)، اما در واقع کامیتی ایجاد نمی‌کند، HEAD را جابجا نمی‌کند، یا $GIT_DIR/MERGE_HEAD را ثبت نمی‌کند (تا باعث شود دستور بعدی git commit یک کامیت ادغام ایجاد کند). این به شما امکان می‌دهد تا یک کامیت منفرد بر روی شاخه کنونی بسازید که تأثیر آن همانند ادغام یک شاخه دیگر (یا بیشتر در حالت ادغام چندگانه یا اختاپوس) است. با --no-squash ادغام را انجام داده و نتیجه را کامیت می‌کند. این گزینه می‌تواند برای لغو اثر --squash استفاده شود. با --squash، استفاده از --commit مجاز نبوده و ناموفق خواهد بود. --verify, --no-verify به‌طور پیش‌فرض، قلاب‌های pre-merge و commit-msg اجرا می‌شوند. هنگامی که --no-verify مشخص شود، این قلاب‌ها دور زده می‌شوند. همچنین githooks(5) را ببینید. -s , --strategy= از راهبرد ادغام داده‌شده استفاده می‌کند؛ می‌تواند بیش از یک بار مشخص شود تا به ترتیبی که باید امتحان شوند تعیین گردند. اگر گزینه -s مشخص نشود، یک فهرست درونی از راهبردها استفاده می‌شود (ort هنگام ادغام یک سر (head) منفرد، و در غیر این صورت octopus). -X