---
title: "رفعت commit غلط عالفرع المشترك؟ ارجع عنه بـ git revert"
description: "git revert بيعمل commit جديد بيعكس الـ commit الغلط، فالتاريخ بيضل متل ما هو وزملاءك ما بيخسروا شي. خلّي git reset وpush --force للفرع يلي إلك لحالك."
url: https://ihsanalapsi.dev/articles/git-revert-pushed-commit
lang: ar
date: 2026-11-02
updated: 2026-11-02
tags: ["أدوات المطورين", "تطوير الويب"]
author: Ihsan Alapsi (إحسان العبسي)
---
# رفعت commit غلط عالفرع المشترك؟ ارجع عنه بـ git revert

الأمر يلي بيمحي الغلطة من التاريخ هو يلي بيكبّرها على فريقك، والأمر يلي بيزيد commit جديد هو يلي بيصلّحها. إذا رفعت commit كسر شي عالفرع المشترك، رح تعرف تحت كيف ترجع عنه بـ git revert بلا ما تلمس تاريخ حدا: commit واحد، أو كذا commit، أو merge، وشو بتعمل إذا صار تعارض بالنص.

## شو بيعمل git revert؟

الـ git revert هو أمر بياخد commit موجود، بيعكس التغييرات يلي جابها، وبيسجّل هالعكس بـ commit جديد. الـ commit الغلط بيضل بالتاريخ، وفوقه commit بيلغي أثره.

حسب [صفحة git revert بتوثيق Git](https://git-scm.com/docs/git-revert)، الأمر بيطلب مجلد شغل نضيف، يعني ما في ولا تعديل عن آخر commit (HEAD). فإذا عندك شغل ما انحفظ، احفظه بـ commit قبل ما تبلّش.

## ليش git reset مش الحل لـ commit انرفع؟

لأنو الـ git reset بيحرّك راس الفرع لورا وبيغيّر التاريخ، وزملاءك يلي سحبوا الـ commit الغلط بيصير شغلهم مبني على تاريخ ما عاد موجود عالسيرفر.

[صفحة git الأساسية بالتوثيق](https://git-scm.com/docs/git) بتفرّق بين الأوامر التلاتة بقسم «Reset, restore and revert»: الـ revert بيعمل commit جديد بيعكس commits قديمة، والـ restore بيرجّع ملفات وما بيغيّر فرعك، والـ reset بيحرّك راس الفرع لحتى يزيد أو يشيل commits، وهالشي بيغيّر التاريخ.

الغلطة يلي بتصير عادة بسيطة: بتعمل reset بجهازك، بتلاقي إنو الـ push انرفض، فبتعمل push --force. هيك بتكتب فوق التاريخ يلي عالسيرفر. كتاب [Pro Git بقسم مخاطر الـ rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing) بيحكي عن هالحالة: حدا عمل git push --force وكتب فوق التاريخ عالسيرفر، وزملاءه صار لازم يعيدوا دمج شغلهم، والأمور بتتلخبط. وقاعدته بسطر واحد: ما تعيد كتابة commits موجودة برّا جهازك وممكن حدا بنى شغله عليها.

## كيف ترجع عن commit واحد بالترتيب؟

بتلاقي الـ hash تبع الـ commit الغلط، بتعمل إله git revert، وبترفع الـ commit الجديد متل أي commit عادي.

1. اسحب آخر نسخة من الفرع، وتأكد إنو مجلد الشغل نضيف. بيطلع معك فرع متل يلي عالسيرفر.
2. لاقي الـ commit الغلط بالسجل:

```bash
git log --oneline
```

3. اعمل revert بالـ hash يلي لقيته. بلا خيارات، الـ git بيفتحلك محرر رسالة الـ commit، ومع `--no-edit` ما بيفتحه:

```bash
git revert --no-edit HASH
```

4. ارفع الـ commit الجديد بـ git push عادي، بلا `--force`. زملاءك بيسحبوه متل أي commit تاني، وما حدا بيخسر شي.

وإذا الـ commit مش آخر واحد، فيك تسمّيه بمكانه من الراس. مثال التوثيق `git revert HEAD~3` بيرجع عن رابع commit من الآخر، وبيعمل commit جديد فيه العكس.

## كيف ترجع عن كذا commit بـ commit واحد؟

بتستعمل `-n` (أو `--no-commit`): الـ git revert بيطبّق العكس على مجلد الشغل والـ index بلا ما يعمل commit، وإنت بتعمل commit واحد بالآخر.

صفحة التوثيق بتعطي هالمثال:

```bash
git revert -n master~5..master~2
```

هالأمر بيرجع عن الـ commits من خامس واحد من آخر master (معه) لتالت واحد من الآخر (معه)، وبيعدّل مجلد الشغل والـ index بس. بعدها راجع التغييرات واعمل commit واحد برسالة بتشرح ليش رجعت عنهن. والتوثيق بيقول إنو `-n` مفيد لهالشغلة بالزبط: لما بدك تعكس أثر كذا commit ورا بعض.

## وإذا الـ commit الغلط merge؟

الـ merge إله أكتر من أب، فالـ git revert ما بيعرف لحاله أي جهة هي الخط الأساسي، وبتحددها إنت بـ `-m` ورقم الأب، والعدّ بيبلّش من 1.

```bash
git revert -m 1 MERGE_HASH
```

بس انتبه لشي بيقوله التوثيق صراحة: الـ revert على merge معناه إنك ما بدك التغييرات يلي جابها هالـ merge أبداً. فإذا رجعت دمجت نفس الفرع بعدين، بيجي بس التغييرات من commits مش جزء من الـ merge يلي رجعت عنه. يعني إذا صلّحت الفرع وبدك تدمجه من جديد، بدّك خطة لهالشغلة قبل ما تدمج.

## شو بتعمل إذا صار تعارض؟

إذا الـ git revert وقف على تعارض، يا بتحلّه وبتكمّل بـ `git revert --continue`، يا بتلغي كل شي بـ `git revert --abort` وبترجع للحالة يلي قبل.

حلّه متل أي تعارض: افتح الملفات، اختار الشكل الصح، زيدها للـ index، وبعدين `--continue`. وإذا حسّيت إنك تهت، `--abort` بيرجّعك لنقطة البداية.

## من وين تبلّش هلق؟

إذا عندك commit غلط عالفرع المشترك اليوم، اعمل إله `git revert --no-edit` وارفعه بلا `--force`. وإذا متعوّد تصلّح بـ reset، خلّيه للفرع يلي إلك لحالك.

الدرس إلنا كمطورين: التاريخ المشترك ملك الفريق كله، فالتصليح عليه بيصير بـ commit جديد بيعكس الغلطة. هيك كل حدا بيسحب التصليح متل أي commit، وما في حدا بيلاقي شغله مبني على تاريخ اختفى.

وأحسن من الرجعة إنك تلقط الغلطة قبل الـ merge: شوف مقال [مراجعة الكود بالـ AI على GitHub](/articles/ai-code-review-github-claude-ga)، ومقال [قفل نسخ الـ actions بالـ workflow](/articles/github-actions-workflow-lockfiles) لحتى ما يتغيّر شي تحتك بلا ما تعرف. وإذا لسا عم تبني أساسك كمبرمج، [خارطة طريق المبرمج 2026](/products/roadmap-2026) بتعطيك الترتيب.

## FAQ

**شو الفرق بين git revert وgit restore؟**

git revert بيعمل commit جديد بيعكس commits قديمة. git restore بيرجّع ملفات بمجلد الشغل من الـ index أو من commit تاني، وما بيغيّر فرعك.

**ليش git revert بيرفض يشتغل عندي؟**

غالباً لأنو عندك تعديلات ما انحفظت. git revert بيطلب مجلد شغل نضيف، يعني ما في ولا تعديل عن آخر commit. احفظ تعديلاتك بـ commit أول، وبعدين جرّب كمان مرة.

**إمتى بستعمل git reset بدل git revert؟**

لما الـ commit لسا ما انرفع، أو بفرع ما حدا غيرك بيشتغل عليه. git reset بيحرّك راس الفرع وبيغيّر التاريخ، وهاد بيخرب شغل يلي بنوا على الـ commits القديمة.

**بيلزمني -m مع كل revert؟**

لأ، بس لما الـ commit يلي بدك ترجع عنه merge. وقتها -m بيحدد رقم الأب يلي بيعتبره git الخط الأساسي، والعدّ بيبلّش من 1.
