شرح git reset: الناعمة والمختلطة والكاملة
ينقل git reset فرعك إلى إيداع آخر. ولا تختلف الأوضاع الثلاثة إلا فيما تفعله بملفاتك. إليك ما يبقيه كل وضع، ومتى تستخدمه، وكيف تعود إذا أعدت التعيين أبعد مما ينبغي.
بقلم Kodmora
شركة البرمجيات المطوّرة لـGitTree
- التراجع والاستعادة
- سجل الإيداعات
- الإيداعات
في هذه الصفحة
تنقل الأوضاع الثلاثة الفرع الحالي إلى الإيداع الذي تحدده. يبقي `--soft` كل التغييرات مُجهَّزة، ويبقيها `--mixed` (الافتراضي) في مجلد العمل دون تجهيز، ويتخلص منها `--hard`. للتراجع عن آخر إيداع مع إبقاء العمل، نفّذ git reset --soft HEAD~1. ولا تستخدم --hard إلا إذا كنت متأكدًا، لأنه يحذف التغييرات غير المودَعة نهائيًا.
ما الفرق بين soft وmixed وhard؟
| الوضع | نقل الفرع | منطقة التجهيز | مجلد العمل | الاستخدام |
|---|---|---|---|---|
--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
اختر الإيداع
انقر بزر الفأرة الأيمن على الإيداع الذي تريد إعادة الفرع إليه وافتح إعادة تعيين … إلى هذا الإيداع.
اختر الوضع
اختر ناعمة: إبقاء كل التغييرات مُجهَّزة أو مختلطة: إبقاء التغييرات في مجلد العمل أو كاملة: التخلّص من كل التغييرات….
تراجع عند الحاجة
يحفظ GitTree عملك تحت
refs/ogt/trashأولًا، فيمكن لأمر تراجع إعادته حتى بعد إعادة التعيين الكاملة.

راجع إعادة تعيين فرع إلى إيداع للتفاصيل، ودرس أوضاع إعادة التعيين للتدرب على مستودع آمن.
الأسئلة الشائعة
ماذا يعني 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. الأسعار والميزات تتغير، وصفحات الشركات هي المرجع.
