بازیابی — راهنمای نجات در موقعیت‌های سخت

جمع‌بندی عملی همه ابزارهای undo: برگرداندن فایل، شاخه، کامیت و حتی مخزن — دفترچه اضطراری شما.

دفترچه اضطراری گیت 🚨

در این مبحث همه ابزارهای بازیابی که یاد گرفتید را در یک مرجع عملی جمع می‌کنیم — برای روزی که به آن نیاز دارید!

۱. برگرداندن تغییرات یک فایل (هنوز کامیت نشده)

# برگشت فایل به آخرین کامیت (تغییرات پاک می‌شوند!):
git restore hello.txt

# همه فایل‌ها:
git restore .

# سینتکس قدیمی:
git checkout -- hello.txt
تغییرات کامیت‌نشده بعد از restore قابل بازیابی نیستند — گیت آن‌ها را هرگز نداشته است!

۲. خارج کردن فایل از staging

git restore --staged hello.txt
# همه:
git restore --staged .

۳. برگرداندن یک فایل از کامیت قدیمی

# نسخه فایل از ۳ کامیت قبل:
git restore --source HEAD~3 hello.txt

# یا از یک شاخه:
git restore --source main -- hello.txt

۴. بازکردن آخرین کامیت

# ویرایش پیام/محتوا:
git commit --amend

# بازکردن کامل (تغییرات در staging):
git reset --soft HEAD~1

۵. حذف کامیت‌های محلی (push نشده)

# حذف کامل ۲ کامیت آخر:
git reset --hard HEAD~2

# حذف اما حفظ تغییرات در working dir:
git reset HEAD~2

۶. خنثی کردن کامیت push شده

# امن برای تیم — کامیت معکوس جدید:
git revert HEAD
git push

۷. بازیابی شاخه حذف‌شده

# پیدا کردن آخرین کامیت شاخه:
git reflog
# ... i9j0k1l HEAD@{7}: commit: روی شاخه حذف‌شده

# بازسازی:
git branch my-branch i9j0k1l

۸. همگام شدن با ریموت (دور ریختن محلی)

# محلی = ریموت (همه تغییرات محلی main پاک می‌شوند):
git fetch origin
git reset --hard origin/main

# پاکسازی فایل‌های untracked هم:
git clean -fd
# (اول با -n پیش‌نمایش بگیرید: git clean -nd)

۹. گیر کردن در وسط merge/rebase

# فرار از merge:
git merge --abort

# فرار از rebase:
git rebase --abort

۱۰. stash گم شده!

# لیست همه stash ها:
git stash list

# دیدن محتوای هر کدام:
git stash show -p stash@{2}

# برگرداندن:
git stash apply stash@{2}

جدول مرجع سریع

مشکلدستور نجات
تغییرات فایل کامیت‌نشده پاک شد❌ قابل بازیابی نیست — درس: زود کامیت کنید!
کامیت اشتباه (محلی)reset --soft HEAD~1
کامیت اشتباه (push شده)git revert HEAD
reset --hard اشتباهgit reflog → reset --hard <id>
شاخه حذف‌شدهreflog → git branch <نام> <id>
merge/rebase گیر کرده--abort
محلی با ریموت ناسازگارreset --hard origin/main

درس‌های پیشگیری

  1. زود و کوچک کامیت کنید — هرچیز کامیت‌شده تقریباً همیشه قابل بازیابی است
  2. قبل از عمل خطرناک (reset/rebase)، شاخه پشتیبان بسازید: git branch backup-point
  3. مرتب push کنید — ریموت پشتیبان شماست
  4. از stash با پیام استفاده کنید تا گم نشود
  5. قبل از --hard نفس عمیق بکشید! 😊

خلاصه

این مبحث بخشی از دوره آموزش کامل Git است.

ابزارهای مرتبط