GIT-REFLOG(1) Git Manual GIT-REFLOG(1)

git-reflog - مدیریت اطلاعات وقایع‌نگار ارجاعات (reflog)

git reflog [show] [<log-options>] [<ref>]
git reflog list
git reflog exists <ref>
git reflog write <ref> <old-oid> <new-oid> <message>
git reflog delete [--rewrite] [--updateref]
        [--dry-run | -n] [--verbose] <ref>@{<specifier>}...
git reflog drop [--all [--single-worktree] | <refs>...]
git reflog expire [--expire=<time>] [--expire-unreachable=<time>]
        [--rewrite] [--updateref] [--stale-fix]
        [--dry-run | -n] [--verbose] [--all [--single-worktree] | <refs>...]

این دستور اطلاعات ثبت‌شده در وقایع‌نگارهای ارجاع (reflogs) را مدیریت می‌کند.

لاگ‌های ارجاع یا «reflogs»، زمان به‌روزرسانی رأس شاخه‌ها و سایر ارجاعات در مخزن محلی را ثبت می‌کنند. وقایع‌نگارهای ارجاع در دستورات مختلف گیت برای مشخص کردن مقدار پیشین یک ارجاع کاربرد دارند. برای نمونه، HEAD@{2} به معنای «محل اشاره HEAD در دو جابه‌جایی قبل»، master@{one.week.ago} به معنای «محل اشاره شاخه master در یک هفته پیش در این مخزن محلی» و مواردی از این دست است. برای جزئیات بیشتر به gitrevisions(7) مراجعه کنید.

این دستور زیردستورهای گوناگونی را می‌پذیرد و بر پایه هر زیردستور گزینه‌های متفاوتی دارد:

زیردستور «show» (که در صورت عدم مشخص کردن هیچ زیردستوری حالت پیش‌فرض نیز هست) لاگ ارجاع ارائه‌شده در خط فرمان (یا به صورت پیش‌فرض HEAD) را نمایش می‌دهد. وقایع‌نگار ارجاع تمامی اقدامات اخیر را پوشش می‌دهد و علاوه بر آن، وقایع‌نگار HEAD تعویض شاخه‌ها را نیز ثبت می‌کند. دستور git reflog show یک نام مستعار برای git log -g --abbrev-commit --pretty=oneline است؛ برای اطلاعات بیشتر به git-log(1) مراجعه کنید.

زیردستور «list» تمام ارجاعاتی را که دارای وقایع‌نگار ارجاع (reflog) متناظر هستند فهرست می‌کند.

زیردستور «exists» بررسی می‌کند که آیا یک ارجاع دارای reflog است یا خیر. در صورت وجود reflog با وضعیت صفر و در غیر این صورت با وضعیتی غیرصفر خارج می‌شود.

زیردستور «write» یک مدخل منفرد در وقایع‌نگار ارجاعِ ارائه‌شده می‌نویسد. این مدخل تازه به وقایع‌نگار ارجاع ضمیمه شده و بنابراین به جدیدترین مدخل تبدیل خواهد شد. نام ارجاع باید به‌طور کامل مشخص شده باشد (fully qualified). شناسه‌های شیء (object ID) قدیم و جدید نباید خلاصه شده باشند و باید به اشیاء موجود اشاره کنند. پیام reflog استانداردسازی (نرمال‌سازی) می‌شود.

زیردستور «delete» مدخل‌های منفرد را از وقایع‌نگار ارجاع حذف می‌کند، اما خود وقایع‌نگار را پاک نمی‌کند. آرگومان آن باید یک مدخل دقیق باشد (مانند «git reflog delete master@{2}»). این زیردستور نیز معمولاً مستقیماً توسط کاربران نهایی استفاده نمی‌شود.

زیردستور «drop» وقایع‌نگار ارجاع را برای ارجاعات مشخص‌شده به طور کامل حذف می‌کند. این در تضاد با «expire» و «delete» است که هر دو برای حذف مدخل‌های reflog به کار می‌روند، اما خود reflog را حذف نمی‌کنند.

زیردستور «expire» مدخل‌های قدیمی‌ترِ وقایع‌نگار ارجاع را هرس می‌کند. مدخل‌های قدیمی‌تر از زمان expire، یا مدخل‌های قدیمی‌تر از زمان expire-unreachable که از نوک فعلی شاخه قابل دسترسی نیستند، از وقایع‌نگار ارجاع حذف می‌شوند. این زیردستور معمولاً مستقیماً توسط کاربران نهایی استفاده نمی‌شود — در عوض، به git-gc(1) مراجعه کنید.

دستور git reflog show هر یک از گزینه‌های پذیرفته‌شده توسط git log را می‌پذیرد.

دستور git reflog delete گزینه‌های --updateref، --rewrite، -n، --dry-run و --verbose را با همان معانی به کار رفته در expire می‌پذیرد.

--all

حذف وقایع‌نگارهای ارجاع (reflogs) تمامی ارجاعات از تمام درخت‌های کاری (worktrees).

--single-worktree

به‌طور پیش‌فرض هنگامی که --all مشخص شده باشد، وقایع‌نگارهای ارجاع از تمام درخت‌های کاری حذف می‌شوند. این گزینه پردازش را تنها به وقایع‌نگارهای ارجاع از درخت کاری جاری محدود می‌کند.

--all

پردازش وقایع‌نگارهای ارجاع تمامی ارجاعات.

--single-worktree

به‌طور پیش‌فرض هنگامی که --all مشخص شده باشد، وقایع‌نگارهای ارجاع از تمام درخت‌های کاری پردازش می‌شوند. این گزینه پردازش را تنها به وقایع‌نگارهای ارجاع از درخت کاری جاری محدود می‌کند.

--expire=<time>

هرس کردن مدخل‌های قدیمی‌تر از زمان مشخص‌شده. اگر این گزینه تعیین نشود، زمان انقضا از تنظیمات پیکربندی gc.reflogExpire گرفته می‌شود که به نوبه خود پیش‌فرض ۹۰ روز دارد. گزینه --expire=all مدخل‌ها را صرف‌نظر از سن آن‌ها هرس می‌کند؛ گزینه --expire=never هرس کردن مدخل‌های قابل دسترس را غیرفعال می‌کند (اما به --expire-unreachable مراجعه کنید).

--expire-unreachable=<time>

هرس کردن مدخل‌های قدیمی‌تر از <time> که از نوک فعلی شاخه قابل دسترسی نیستند. اگر این گزینه تعیین نشود، زمان انقضا از تنظیمات پیکربندی gc.reflogExpireUnreachable گرفته می‌شود که به نوبه خود پیش‌فرض ۳۰ روز دارد. گزینه --expire-unreachable=all مدخل‌های غیرقابل دسترس را صرف‌نظر از سن آن‌ها هرس می‌کند؛ گزینه --expire-unreachable=never هرس زودهنگام مدخل‌های غیرقابل دسترس را غیرفعال می‌کند (اما به --expire مراجعه کنید).

--updateref

به‌روزرسانی ارجاع به مقدار بالاترین مدخل وقایع‌نگار ارجاع (یعنی <ref>@{0}) در صورتی که مدخل بالاترینِ قبلی هرس شده باشد. (این گزینه برای ارجاعات نمادین نادیده گرفته می‌شود.)

--rewrite

اگر مدخل پیشینِ یک مدخل reflog هرس شود، مقدار SHA-1 «قدیمی» آن را به گونه‌ای تنظیم می‌کند که برابر با فیلد SHA-1 «جدید» مدخلی شود که اکنون پیش از آن قرار می‌گیرد.

--stale-fix

هرس کردن هر مدخل reflog که به «کامیت‌های خراب» (broken commits) اشاره دارد. یک کامیت خراب، کامیتی است که از هیچ‌یک از رئوس ارجاعات قابل دسترسی نباشد و به‌طور مستقیم یا غیرمستقیم به یک کامیت، درخت (tree) یا شیء حبابی (blob) گم‌شده اشاره کند.

این محاسبه شامل پیمایش تمام اشیاء قابل دسترسی است، یعنی هزینه‌ای هم‌اندازه با git prune دارد. این گزینه در درجه اول برای رفع خرابی‌های ناشی از جمع‌آوری زباله (garbage collection) با استفاده از نسخه‌های قدیمی‌تر گیت در نظر گرفته شده است، که از اشیاء ارجاع‌شده توسط reflogها محافظت نمی‌کردند.

-n, --dry-run

هیچ مدخلی را واقعاً هرس نمی‌کند؛ فقط نشان می‌دهد چه چیزهایی هرس می‌شدند.

--verbose

چاپ اطلاعات بیشتر بر روی صفحه نمایش.

git-log(1), git-gc(1), gitrevisions(7)

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

2026-06-29 Git 2.55.0