GIT-REPLACE(1) Git Manual GIT-REPLACE(1)

git-replace - ایجاد، ویرایش یا حذف ارجاعات جایگزین اشیاء

git replace [-f] <object> <replacement>
git replace [-f] --edit <object>
git replace [-f] --graft <commit> [<parent>...]
git replace [-f] --convert-graft-file
git replace -d <object>...
git replace [--format=<format>] [-l [<pattern>]]

یک ارجاع replace را در فضای نام refs/replace/ اضافه می‌کند.

نام ارجاع replace، مقدار SHA-1 شیئی است که جایگزین می‌شود. محتوای ارجاع replace، مقدار SHA-1 شیء جایگزین است.

شیء جایگزین‌شده و شیء جایگزین باید از یک نوع باشند. این محدودیت را می‌توان با استفاده از -f دور زد.

مگر اینکه -f داده شده باشد، ارجاع replace نباید از قبل وجود داشته باشد.

هیچ محدودیت دیگری روی اشیاء جایگزین‌شده و جایگزین وجود ندارد. کامیت‌های ادغام (merge) را می‌توان با کامیت‌های غیر ادغام جایگزین کرد و برعکس.

ارجاعات جایگزین به طور پیش‌فرض توسط تمام دستورات گیت استفاده خواهند شد، به جز دستوراتی که پیمایش دسترسی‌پذیری را انجام می‌دهند (prune، pack transfer و fsck).

غیرفعال کردن استفاده از ارجاعات جایگزین برای هر دستوری، با استفاده از گزینه --no-replace-objects درست پس از git امکان‌پذیر است.

برای مثال اگر کامیت foo با کامیت bar جایگزین شده باشد:

$ git --no-replace-objects cat-file commit foo

اطلاعات مربوط به کامیت foo را نشان می‌دهد، در حالی که:

$ git cat-file commit foo

اطلاعات مربوط به کامیت bar را نشان می‌دهد.

متغیر محیطی GIT_NO_REPLACE_OBJECTS را می‌توان برای دستیابی به اثری مشابه گزینه --no-replace-objects تنظیم کرد.

-f, --force

اگر یک ارجاع جایگزین برای همان شیء از قبل وجود داشته باشد، (به جای ناموفق شدن دستور) بازنویسی خواهد شد.

-d, --delete

حذف ارجاعات جایگزین موجود برای اشیاء داده‌شده.

--edit <object>

محتوای یک شیء را به صورت تعاملی ویرایش می‌کند. محتوای موجود برای <object> به صورت فرمت‌بندی‌شده (pretty-printed) در یک فایل موقت قرار می‌گیرد، ویرایشگری روی آن فایل باز می‌شود و نتیجه برای ایجاد یک شیء جدید از همان نوع <object> تجزیه می‌گردد. سپس یک ارجاع جایگزین ایجاد می‌شود تا <object> را با شیء تازه‌ساخته‌شده جایگزین کند. برای جزئیات در مورد نحوه انتخاب ویرایشگر، git-var(1) را ببینید.

--raw

هنگام ویرایش، محتوای خام شیء را به جای محتوای فرمت‌بندی‌شده ارائه می‌دهد. در حال حاضر این گزینه فقط بر روی درخت‌ها (trees) تأثیر می‌گذارد که به شکل باینری آن‌ها نمایش داده خواهند شد. کار با این حالت سخت‌تر است، اما می‌تواند هنگام ترمیم درختی که آن‌قدر خراب شده که قابل فرمت‌بندی زیبا نیست، مفید باشد. توجه داشته باشید که ممکن است لازم باشد ویرایشگر خود را برای خواندن و نوشتن صحیح داده‌های باینری پیکربندی کنید.

--graft <commit> [<parent>...]

ایجاد یک کامیت پیوندی (graft commit). یک کامیت جدید با محتوایی مشابه <commit> ایجاد می‌شود، با این تفاوت که والدهای آن به جای والدهای <commit>، مقادیر [<parent>...] خواهند بود. سپس یک ارجاع جایگزین برای جایگزینی <commit> با کامیت تازه‌ساخته‌شده ایجاد می‌شود. از --convert-graft-file برای تبدیل فایل $GIT_DIR/info/grafts و استفاده از ارجاعات جایگزین به جای آن استفاده کنید.

--convert-graft-file

برای تمام ورودی‌های موجود در $GIT_DIR/info/grafts کامیت‌های پیوندی ایجاد کرده و پس از موفقیت، آن فایل را حذف می‌کند. هدف این گزینه کمک به کاربران برای گذار و رهایی از فایل پیوند (graft file) است که اکنون منسوخ شده است.

-l <pattern>, --list <pattern>

فهرست کردن ارجاعات جایگزین برای اشیائی که با الگوی داده‌شده مطابقت دارند (یا همه در صورت ارائه نشدن الگو). تایپ کردن "git replace" بدون آرگومان نیز تمام ارجاعات جایگزین را فهرست می‌کند.

--format=<format>

هنگام فهرست کردن، از <format> مشخص‌شده استفاده می‌کند که می‌تواند یکی از موارد short، medium و long باشد. در صورت حذف، قالب به صورت پیش‌فرض short خواهد بود.

قالب‌های زیر در دسترس هستند:

•short: <replaced-sha1>
•medium: <replaced-sha1> → <replacement-sha1>
•long: <replaced-sha1> (<replaced-type>) → <replacement-sha1> (<replacement-type>)

دستورات git-hash-object(1)، git-rebase(1) و git-filter-repo[1] در میان دیگر دستورات گیت، می‌توانند برای ایجاد اشیاء جایگزین از روی اشیاء موجود استفاده شوند. گزینه --edit را می‌توان همراه با git replace برای ایجاد یک شیء جایگزین با ویرایش یک شیء موجود به کار برد.

اگر می‌خواهید تعداد زیادی blob، درخت یا کامیت را که بخشی از یک رشته کامیت هستند جایگزین کنید، ممکن است فقط بخواهید یک رشته جایگزین از کامیت‌ها ایجاد نمایید و سپس تنها کامیت موجود در نوک (tip) رشته کامیت‌های هدف را با کامیت موجود در نوک رشته کامیت‌های جایگزین، جایگزین کنید.

مقایسه حباب‌ها (blobs) یا درخت‌ها (trees) که جایگزین شده‌اند با مواردی که جایگزین آن‌ها هستند، به درستی کار نخواهد کرد. همچنین استفاده از git reset --hard برای بازگشت به یک کامیت جایگزین‌شده، شاخه را به جای کامیت جایگزین‌شده به کامیت جایگزین منتقل می‌کند.

ممکن است هنگام استفاده از git rev-list مشکلات دیگری در رابطه با اشیاء در انتظار (pending objects) وجود داشته باشد.

وجود اشیاء جایگزین یا پیوندهای کامیت (commit grafts) خواندن یا نوشتن در commit-graph را غیرفعال می‌کند، که این امر می‌تواند باعث بروز مشکلات عملکردی و افت کارایی شود. git-commit-graph(1) را ببینید.

git-hash-object(1) git-rebase(1) git-tag(1) git-branch(1) git-commit(1) git-var(1) git(1) git-filter-repo[1]

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

1.
git-filter-repo
2026-06-29 Git 2.55.0