GIT-MERGE-FILE(1) Git Manual GIT-MERGE-FILE(1)

git-merge-file - اجرای یک ادغام سه‌طرفه روی فایل‌ها

git merge-file [-L <current-name> [-L <base-name> [-L <other-name>]]]
        [--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=<n>]
        [--[no-]diff3] [--object-id] <current> <base> <other>

با داشتن سه فایل <current>، <base> و <other>، دستور git merge-file تمام تغییراتی را که از <base> به <other> منتهی شده‌اند، در <current> اعمال می‌کند. نتیجه به طور معمول در <current> ذخیره می‌شود. دستور git merge-file برای ترکیب تغییرات جداگانه روی یک نسخه اصلی مفید است. فرض کنید <base> نسخه اصلی است و هر دو فایل <current> و <other> تغییراتی روی <base> هستند؛ در این حالت git merge-file هر دو دسته تغییرات را با یکدیگر ترکیب می‌کند.

اگر هر دو فایل <current> و <other> در بخش مشترکی از خطوط دارای تغییر باشند، یک تداخل (conflict) رخ می‌دهد. در صورت یافتن تداخل، git merge-file معمولاً یک هشدار چاپ می‌کند و تداخل را میان خطوطی شامل نشانگرهای <<<<<<< و >>>>>>> محصور می‌نماید. یک تداخل معمولی شبیه به این خواهد بود:

<<<<<<< A
lines in file A
=======
lines in file B
>>>>>>> B

در صورت وجود تداخل، کاربر باید نتیجه را ویرایش کرده و یکی از گزینه‌ها را حذف کند. با این حال، زمانی که گزینهٔ --ours، --theirs یا --union فعال باشد، این تداخل‌ها به ترتیب به نفع خطوط <current>، خطوط <other> یا خطوط هر دو فایل حل می‌شوند. طول نشانگرهای تداخل را می‌توان با گزینهٔ --marker-size مشخص کرد.

اگر --object-id مشخص شود، دقیقاً همان رفتار رخ می‌دهد، با این تفاوت که به جای مشخص کردن مواردی که باید به عنوان فایل ادغام شوند، آنها به عنوان فهرستی از شناسه‌های شیء (object IDs) که به blobها اشاره دارند مشخص می‌شوند.

مقدار خروج (exit value) این برنامه در صورت بروز خطا منفی است، و در غیر این صورت برابر با تعداد تداخل‌ها خواهد بود (اگر تعداد تداخل‌ها بیشتر از این مقدار باشد، به ۱۲۷ محدود می‌شود). اگر ادغام بدون تداخل انجام شود، مقدار خروج ۰ است.

دستور git merge-file طوری طراحی شده است که یک همتای کمینه از merge در RCS باشد؛ یعنی تمام قابلیت‌های merge در RCS را که توسط git(1) مورد نیاز است پیاده‌سازی می‌کند.

--object-id

محتویاتی که باید ادغام شوند را به جای فایل، به عنوان blob در مخزن فعلی مشخص می‌کند. در این حالت، عملیات باید درون یک مخزن معتبر انجام شود.

اگر گزینهٔ -p مشخص شده باشد، فایل ادغام‌شده (از جمله تداخل‌ها، در صورت وجود) مانند حالت عادی به خروجی استاندارد ارسال می‌شود؛ در غیر این صورت، فایل ادغام‌شده در مخزن اشیاء (object store) نوشته شده و شناسه شیء (object ID) مربوط به blob آن در خروجی استاندارد نوشته می‌شود.

-L <label>

این گزینه می‌تواند تا سه بار مشخص شود، و برچسب‌هایی را تعیین می‌کند که باید به جای نام فایل‌های متناظر در گزارش‌های تداخل استفاده شوند. یعنی دستور git merge-file -L x -L y -L z a b c خروجی‌ای تولید می‌کند که به نظر می‌رسد به جای فایل‌های a، b و c از فایل‌های x، y و z آمده است.

-p

ارسال نتایج به خروجی استاندارد به جای بازنویسی روی <current>.

-q

حالت بی‌صدا؛ هشداری در مورد تداخل‌ها نمایش داده نمی‌شود.

--diff3

نمایش تداخل‌ها به سبک «diff3».

--zdiff3

نمایش تداخل‌ها به سبک «zdiff3».

مقدار پیش‌فرض گزینه‌های --diff3 و --zdiff3 از متغیر پیکربندی merge.conflictStyle گرفته می‌شود (نگاه کنید به git-config(1)).

--ours, --theirs, --union

به جای باقی گذاشتن تداخل‌ها در فایل، تداخل‌ها را به نفع خطوط طرف ما (یا طرف آنها یا هر دو) حل می‌کند.

--diff-algorithm={patience|minimal|histogram|myers}

استفاده از یک الگوریتم diff متفاوت هنگام ادغام. مقدار پیش‌فرض فعلی «myers» است، اما انتخاب الگوریتم‌های جدیدتر مانند «histogram» می‌تواند به جلوگیری از ادغام‌های نادرست که به دلیل خطوط منطبق کم‌اهمیت (مانند آکوالادهای توابع مجزا) رخ می‌دهند کمک کند. همچنین نگاه کنید به git-diff(1) --diff-algorithm.

git merge-file README.my README README.upstream

تغییرات README.my و README.upstream از زمان README را با هم ترکیب کرده، تلاش می‌کند آنها را ادغام کند و نتیجه را در README.my می‌نویسد.

git merge-file -L a -L b -L c tmp/a123 tmp/b234 tmp/c345

فایل‌های tmp/a123 و tmp/c345 را با نسخه پایه tmp/b234 ادغام می‌کند، اما به جای tmp/a123 و tmp/c345، از برچسب‌های a و c استفاده می‌نماید.

git merge-file -p --object-id abc1234 def567 890abcd

تغییرات blobهای abc1234 و 890abcd را از زمان def567 با هم ترکیب کرده، تلاش می‌کند آنها را ادغام کند و نتیجه را در خروجی استاندارد می‌نویسد.

بخشی از مجموعهٔ git(1)

2026-06-29 Git 2.55.0