تخطَّ إلى المحتوى
GitTree
شروحات Gitقراءة في 3 دقائق

شرح git reset: الناعمة والمختلطة والكاملة

ينقل git reset فرعك إلى إيداع آخر. ولا تختلف الأوضاع الثلاثة إلا فيما تفعله بملفاتك. إليك ما يبقيه كل وضع، ومتى تستخدمه، وكيف تعود إذا أعدت التعيين أبعد مما ينبغي.

بقلم Kodmora

شركة البرمجيات المطوّرة لـGitTree

آخر تحديث
  • التراجع والاستعادة
  • سجل الإيداعات
  • الإيداعات
في هذه الصفحة

تنقل الأوضاع الثلاثة الفرع الحالي إلى الإيداع الذي تحدده. يبقي `--soft` كل التغييرات مُجهَّزة، ويبقيها `--mixed` (الافتراضي) في مجلد العمل دون تجهيز، ويتخلص منها `--hard`. للتراجع عن آخر إيداع مع إبقاء العمل، نفّذ git reset --soft HEAD~1. ولا تستخدم --hard إلا إذا كنت متأكدًا، لأنه يحذف التغييرات غير المودَعة نهائيًا.

ما الفرق بين soft وmixed وhard؟

ما يغيّره كل وضع من git reset
الوضعنقل الفرعمنطقة التجهيزمجلد العملالاستخدام
--softنعمتبقىيبقىإعادة الإيداع: يبقى كل شيء مُجهَّزًا
--mixedنعمتُعاديبقىإلغاء التجهيز وإعادة اختيار ما يُودَع
--hardنعمتُعاديُعادالتخلص من العمل

يحتفظ Git بثلاث نسخ من عملك: سجل الإيداعات، ومنطقة التجهيز، ومجلد العمل. تنقل إعادة التعيين الأولى دائمًا، ويقرر الوضع هل تعيد كتابة الأخريين أيضًا.

متى أستخدم git reset --soft؟

استخدمه للتراجع عن إيداعات مع إبقاء كل التغييرات مُجهَّزة وجاهزة للإيداع من جديد. وهو أسرع طريقة لضم فرع في إيداع واحد:

# undo the last commit, keep the changes staged
git reset --soft HEAD~1

# squash everything since main into one commit
git reset --soft main
git commit -m "feat(search): quick open"

متى أستخدم git reset --mixed؟

هو الوضع الافتراضي، فالأمر git reset يعني git reset --mixed. استخدمه للتراجع عن إيداعات وتقسيم العمل بطريقة أخرى، أو لإلغاء تجهيز الملفات:

# undo the last two commits, keep the changes unstaged
git reset HEAD~2

# unstage one file (the branch does not move)
git reset src/search.ts

ولإلغاء التجهيز، يؤدي git restore --staged src/search.ts المهمة نفسها بوضوح أكبر.

متى أستخدم git reset --hard؟

# drop the last commit and its changes
git reset --hard HEAD~1

# match the remote exactly
git fetch origin
git reset --hard origin/main

كيف أزيل إيداعًا من فرع؟

طرق إزالة إيداع
الحالةالأمر
آخر إيداع ولم يُدفعgit reset --hard HEAD~1
إيداع أقدم ولم يُدفعgit rebase -i <sha>~1 ثم علّمه drop
إيداع مدفوع بالفعلgit revert <sha>
إيداع على الفرع الخطأgit cherry-pick ثم أعد تعيين الفرع القديم

يبقي git revert السجل سليمًا، فهو الخيار الآمن الوحيد على فرع مشترك. أما إعادة تعيين فرع مدفوع فتحتاج إلى دفع قسري وتفسد نسخ زملائك. ولكل من إعادة التأسيس التفاعلية والانتقاء دليله الخاص.

كيف أتراجع عن git reset؟

نقلت إعادة التعيين الفرع، ويتذكر reflog موضعه السابق:

git reflog
# 3e52f10 HEAD@{0}: reset: moving to HEAD~2
# 9b3c7d1 HEAD@{1}: commit: add search box

git reset --hard 9b3c7d1

يعيد هذا الإيداعات حتى بعد --hard. وقد يعثر git fsck --lost-found أحيانًا على ملفات جُهِّزت ولم تُودَع. أما التغييرات التي لم تُجهَّز قط فقد ضاعت. ويغطي مقال التراجع عن reset وrebase والإيداعات كل الحالات.

ما الفرق بين reset وrevert وrestore؟

ثلاثة أوامر متشابهة الأسماء
الأمرما يفعلههل يعيد كتابة السجل؟
git resetينقل الفرع إلى إيداع آخرنعم
git revertيضيف إيداعًا يلغي إيداعًا آخرلا
git restoreيغيّر الملفات ولا يمس الفرعلا

طريقة إعادة تعيين فرع في GitTree

  1. اختر الإيداع

    انقر بزر الفأرة الأيمن على الإيداع الذي تريد إعادة الفرع إليه وافتح إعادة تعيين … إلى هذا الإيداع.

  2. اختر الوضع

    اختر ناعمة: إبقاء كل التغييرات مُجهَّزة أو مختلطة: إبقاء التغييرات في مجلد العمل أو كاملة: التخلّص من كل التغييرات….

  3. تراجع عند الحاجة

    يحفظ GitTree عملك تحت refs/ogt/trash أولًا، فيمكن لأمر تراجع إعادته حتى بعد إعادة التعيين الكاملة.

أوضاع إعادة التعيين الناعمة والمختلطة والكاملة في قائمة الإيداع في GitTree.
أوضاع إعادة التعيين الناعمة والمختلطة والكاملة في قائمة الإيداع في GitTree.واجهة GitTree مع مستودع للعرض.

راجع إعادة تعيين فرع إلى إيداع للتفاصيل، ودرس أوضاع إعادة التعيين للتدرب على مستودع آمن.

الأسئلة الشائعة

ماذا يعني HEAD~1؟

الإيداع السابق للإيداع الحالي بخطوة واحدة. وHEAD~3 يعني ثلاث خطوات إلى الوراء. ويعرض git log --oneline المعرّفات إن فضلت تسمية الإيداع مباشرة.

هل يحذف git reset الإيداعات؟

إنه ينقل الفرع بعيدًا عنها فتختفي من git log. وتبقى في reflog مدة 30 يومًا على الأقل افتراضيًا، ثم يمكن لـ Git إزالتها.

كيف أتراجع عن آخر إيداع مع إبقاء التغييرات؟

نفّذ git reset --soft HEAD~1 لإبقائها مُجهَّزة، أو git reset HEAD~1 لإبقائها دون تجهيز.

هل git reset --hard آمن؟

هو آمن للعمل المودَع الذي يستطيع reflog إعادته، وليس آمنًا للعمل غير المودَع لأنه يحذفه. خبّئ أو أودِع أولًا إن لم تكن متأكدًا.

هل يمكنني إعادة تعيين فرع مدفوع بالفعل؟

فقط بالدفع القسري، الذي يعيد كتابة الفرع عند الجميع. أما على الفروع المشتركة فاستخدم git revert.

المصادر

تحققنا من المعلومات عن المنتجات الأخرى من صفحاتها الرسمية بتاريخ 7 نوفمبر 2026. الأسعار والميزات تتغير، وصفحات الشركات هي المرجع.