Git Reset: Difference between revisions

From binaryoption
Jump to navigation Jump to search
Баннер1
(@pipegas_WP)
 
(@pipegas_WP)
 
Line 1: Line 1:
== Git Reset: دليل شامل للمبتدئين ==
=== Git Reset: دليل شامل للمبتدئين ===


'''مقدمة'''
'''مقدمة'''
'''Git Reset''' هو أمر قوي في نظام التحكم في الإصدار [[Git]] يسمح لك بالتراجع عن التغييرات في مستودعك. يمكن استخدامه لإلغاء الالتزامات (commits) أو إعادة تعيين الفرع إلى حالة سابقة. فهم هذا الأمر أمر بالغ الأهمية لأي شخص يعمل مع [[Git]]، سواء كان مطور برامج أو مدير مشروع أو أي شخص يتعامل مع التحكم في الإصدار. هذه المقالة تهدف إلى تقديم شرح مفصل لـ '''Git Reset''' للمبتدئين، مع توضيح استخداماته المختلفة ومخاطره المحتملة.


== فهم الـ Commit History ==
في عالم [[أنظمة التحكم في الإصدار]]، يعتبر Git أداة قوية ومرنة لإدارة التغييرات في الكود. أحد الأوامر الأساسية في Git، ولكنه قد يكون مربكًا للمبتدئين، هو الأمر `git reset`. يتيح لك هذا الأمر التراجع عن التغييرات التي تم إجراؤها في مستودع Git، ولكن بطرق مختلفة. هذا المقال يهدف إلى شرح الأمر `git reset` بالتفصيل، مع التركيز على كيفية استخدامه بشكل فعال وآمن.


قبل الغوص في تفاصيل '''Git Reset'''، من المهم فهم كيفية عمل [[Commit History]]. كلما قمت بإجراء تغييرات على ملفاتك وقم بتثبيتها (commit)، يتم إنشاء سجل جديد (commit) في مستودعك.  هذا السجل يحتوي على معلومات حول التغييرات التي تم إجراؤها، والمؤلف، والتاريخ، ورسالة الالتزام.  يمكنك تصور الـ Commit History كخط زمني، حيث يمثل كل commit نقطة على هذا الخط.  أوامر مثل [[Git Log]] تسمح لك بعرض هذا التاريخ.
== ما هو Git Reset؟ ==


== أوضاع الـ Reset المختلفة ==
ببساطة، `git reset` هو أمر يغير مؤشر الفرع الحالي (branch) ليشير إلى commit آخر.  هذا يعني أنه يمكنك "إعادة ضبط" فرعك إلى حالة سابقة، مما يؤدي إلى إزالة commits من تاريخ الفرع.  ومع ذلك، فإن الطريقة التي يتم بها إزالة هذه الـ commits، وما يحدث للملفات المتأثرة، يعتمد على الخيارات التي تستخدمها مع الأمر `git reset`.


يأتي '''Git Reset''' بثلاثة أوضاع رئيسية، تحدد مدى تأثيره على الـ Commit History والـ Staging Area والـ Working Directory:
== أوضاع Git Reset المختلفة ==


* '''--soft''': هذا الوضع هو الأقل تدميراً. يقوم بإعادة تعيين مؤشر الفرع (branch pointer) إلى الـ commit المحدد، لكنه يترك التغييرات في الـ Staging Area والـ Working Directory دون تغيير. هذا يعني أن التغييرات لا تزال موجودة ويمكن تثبيتها مرة أخرى.
هناك ثلاثة أوضاع رئيسية لأمر `git reset`:
* '''--mixed''': هذا هو الوضع الافتراضي إذا لم تحدد أي وضع. يقوم بإعادة تعيين مؤشر الفرع إلى الـ commit المحدد وإزالة التغييرات من الـ Staging Area، لكنه يتركها في الـ Working Directoryهذا يعني أن التغييرات لا تزال موجودة كملفات معدلة، ولكنها ليست جاهزة للتثبيت.
 
* '''--hard''': هذا الوضع هو الأكثر تدميراً. يقوم بإعادة تعيين مؤشر الفرع إلى الـ commit المحدد وإزالة التغييرات من الـ Staging Area والـ Working Directoryهذا يعني أن التغييرات يتم فقدانها بشكل دائم (إلا إذا كانت لديك نسخة احتياطية).
* '''--soft''' : هذا الوضع هو الأقل تدميراً. يقوم بتحريك مؤشر الفرع ليشير إلى commit آخر، ولكن يحتفظ بالتغييرات التي تم إجراؤها في منطقة التدريج (staging area) ومجلد العمل (working directory). بمعنى آخر، التغييرات لا تزال موجودة كملفات معدلة جاهزة للتسجيل (commit).
* '''--mixed''' : هذا هو الوضع الافتراضي إذا لم تحدد أي وضع. يقوم بتحريك مؤشر الفرع ليشير إلى commit آخر، ويقوم بإزالة التغييرات من منطقة التدريج، ولكن يحتفظ بها في مجلد العمل كملفات غير متتبعة (untracked)بمعنى آخر، التغييرات لا تزال موجودة في ملفاتك، ولكنك تحتاج إلى إضافتها مرة أخرى إلى منطقة التدريج قبل التسجيل.
* '''--hard''' : هذا الوضع هو الأكثر تدميراً. يقوم بتحريك مؤشر الفرع ليشير إلى commit آخر، ويقوم بإزالة التغييرات من منطقة التدريج ومجلد العملبمعنى آخر، التغييرات **تُفقد** بشكل دائم (إلا إذا كانت موجودة في commits أخرى أو في نسخة احتياطية).


{| class="wikitable"
{| class="wikitable"
|+ أوضاع Git Reset
|+ أوضاع Git Reset
|-
|-
| الوضع || تأثيره على مؤشر الفرع || تأثيره على الـ Staging Area || تأثيره على الـ Working Directory ||
| الوضع || منطقة التدريج || مجلد العمل || وصف
| --soft || إعادة تعيين || لا يتغير || لا يتغير ||
| --soft || يحتفظ بالتغييرات || يحتفظ بالتغييرات || يحرك المؤشر مع الاحتفاظ بالتغييرات المسجلة
| --mixed || إعادة تعيين || إزالة التغييرات || لا يتغير ||
| --mixed || يزيل التغييرات || يحتفظ بالتغييرات || يحرك المؤشر ويزيل التغييرات من منطقة التدريج
| --hard || إعادة تعيين || إزالة التغييرات || إزالة التغييرات ||
| --hard || يزيل التغييرات || يزيل التغييرات || يحرك المؤشر ويزيل التغييرات تماماً
|}
|}


== استخدام Git Reset ==
== أمثلة عملية ==


بناء الجملة الأساسي لـ '''Git Reset''' هو:
لنفترض أن لديك تاريخ commit بسيط:


[[User:Admin|Admin]] ([[User talk:Admin|talk]])
```
git reset [--soft | --mixed | --hard] [commit]
A -- B -- C (HEAD)
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
```


* '''commit''': هذا هو الـ commit الذي تريد إعادة تعيين الفرع إليه. إذا لم تحدد commit، فسيتم استخدام HEAD (أحدث commit).
حيث `HEAD` يشير إلى أحدث commit في الفرع الحالي.


'''أمثلة'''
* '''git reset --soft HEAD^''' : سينقل `HEAD` إلى commit `B`. التغييرات التي تم إجراؤها في commit `C` ستكون موجودة في منطقة التدريج.
* '''git reset --mixed HEAD^''' : سينقل `HEAD` إلى commit `B`. التغييرات التي تم إجراؤها في commit `C` ستكون موجودة في مجلد العمل كملفات معدلة غير مسجلة.
* '''git reset --hard HEAD^''' : سينقل `HEAD` إلى commit `B`. التغييرات التي تم إجراؤها في commit `C` **ستُفقد**.


* '''إلغاء آخر commit مع الاحتفاظ بالتغييرات:'''
== متى تستخدم Git Reset؟ ==
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
git reset --soft HEAD^
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
هذا الأمر يلغي آخر commit، لكنه يترك التغييرات في الـ Staging Area.


* '''إلغاء آخر commit وإزالة التغييرات من الـ Staging Area:'''
* '''التراجع عن commit خاطئ''' : إذا قمت بتسجيل commit يحتوي على أخطاء، يمكنك استخدام `git reset --soft HEAD^` للتراجع عنه وإصلاح الأخطاء ثم إعادة تسجيله.
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
* '''إلغاء التسجيل (uncommit) للتغييرات''' : إذا قمت بتسجيل تغييرات لا تريدها، يمكنك استخدام `git reset --mixed HEAD^` لإزالة التغييرات من منطقة التدريج.
git reset --mixed HEAD^
* '''إعادة ضبط الفرع إلى حالة سابقة''' : إذا كنت تريد التخلص من سلسلة من commits، يمكنك استخدام `git reset --hard <commit_hash>` لإعادة ضبط الفرع إلى commit معين. **كن حذرًا جدًا عند استخدام هذا الوضع، حيث أن التغييرات ستُفقد.**
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
هذا الأمر يلغي آخر commit ويزيل التغييرات من الـ Staging Area، لكنه يتركها في الـ Working Directory.


* '''إلغاء آخر commit وفقدان التغييرات:'''
== Git Reset مقابل Git Revert ==
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
git reset --hard HEAD^
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
هذا الأمر يلغي آخر commit ويزيل التغييرات من الـ Staging Area والـ Working Directory. **كن حذراً عند استخدام هذا الأمر!**


* '''إعادة تعيين الفرع إلى commit محدد:'''
من المهم التمييز بين `git reset` و `git revert`.  بينما يقوم `git reset` بتغيير تاريخ الفرع، فإن `git revert` يقوم بإنشاء commit جديد يعكس التغييرات التي تم إجراؤها في commit معين.  لذلك، `git revert` هو خيار أكثر أمانًا إذا كنت تريد التراجع عن التغييرات في فرع مشترك (shared branch)، حيث أنه لا يعيد كتابة التاريخ.  راجع [[Git Revert]] للحصول على مزيد من المعلومات.
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
git reset --hard <commit_hash>
[[User:Admin|Admin]] ([[User talk:Admin|talk]])
هذا الأمر يعيد تعيين الفرع إلى الـ commit المحدد بالـ hash الخاص به.


== اعتبارات هامة ومخاطر محتملة ==
== اعتبارات هامة ==


* '''فقدان البيانات:''' استخدام '''--hard''' يمكن أن يؤدي إلى فقدان البيانات بشكل دائم. تأكد من أنك تفهم المخاطر قبل استخدامه.
* '''الحذر مع --hard''' : استخدم `git reset --hard` بحذر شديد، خاصة إذا كنت تعمل على فرع مشترك. قد يؤدي فقدان التغييرات إلى مشاكل للآخرين.
* '''تعديل التاريخ العام:''' إعادة تعيين commits تم دفعها (push) إلى مستودع بعيد (remote repository) يمكن أن يسبب مشاكل كبيرة للآخرين الذين يعملون على نفس الفرع. تجنب إعادة تعيين commits التي تم دفعها.
* '''النسخ الاحتياطي''' : قبل إجراء أي عملية `git reset`، خاصة إذا كنت تستخدم الوضع `--hard`، تأكد من أن لديك نسخة احتياطية من عملك.
* '''استخدام Reflog:''' حتى إذا فقدت commits باستخدام '''--hard'''، يمكنك استعادتها باستخدام [[Git Reflog]]. الـ Reflog يسجل تاريخ جميع التغييرات التي تم إجراؤها على مؤشر HEAD الخاص بك.
* '''فهم التاريخ''' : تأكد من أنك تفهم تاريخ الفرع قبل إجراء أي عملية `git reset`. استخدم الأمر `git log` لعرض التاريخ.
* '''الفرق بين Reset و Revert:''' [[Git Revert]] هو أمر آخر يسمح لك بالتراجع عن التغييرات، ولكنه يفعل ذلك عن طريق إنشاء commit جديد يعكس التغييرات الأصلية. هذا يعتبر أكثر أمانًا من '''Git Reset''' لأنه لا يعدل التاريخ العام.


== استراتيجيات التداول ذات الصلة ==
== استراتيجيات تداول ذات صلة ==


* [[استراتيجية المتوسط المتحرك]]
* [[استراتيجية الاختراق (Breakout Strategy)]]
* [[استراتيجية اختراق النطاق]]
* [[استراتيجية المتوسطات المتحركة (Moving Average Strategy)]]
* [[استراتيجية التصحيح]]
* [[استراتيجية التصحيح (Pullback Strategy)]]
* [[استراتيجية بولينجر باندز]]
* [[استراتيجية قناة السعر (Price Channel Strategy)]]
* [[استراتيجية MACD]]
* [[استراتيجية التداول المتأرجح (Swing Trading Strategy)]]
* [[استراتيجية RSI]]
* [[تداول النطاق (Range Trading)]]
* [[استراتيجية فيبوناتشي]]
* [[تداول الاتجاه (Trend Trading)]]
* [[استراتيجية إيشيموكو]]
* [[تداول الأخبار (News Trading)]]
* [[استراتيجية التداول المتأرجح]]
* [[تداول الخوارزمي (Algorithmic Trading)]]
* [[استراتيجية سكالبينج]]
* [[تداول الزخم (Momentum Trading)]]
* [[استراتيجية التداول اليومي]]
* [[تداول القيمة (Value Trading)]]
* [[استراتيجية التداول طويل الأجل]]
* [[تداول المضاربة (Scalping)]]
* [[استراتيجية التداول بناءً على الأخبار]]
* [[تداول اليوم (Day Trading)]]
* [[استراتيجية التداول اللحظي]]
* [[تداول المواقع (Position Trading)]]
* [[استراتيجية مارتينجال]]
* [[تداول الأنماط (Pattern Trading)]]


== التحليل الفني وحجم التداول ==
== التحليل الفني وحجم التداول ==


* [[الشموع اليابانية]]
* [[مؤشر القوة النسبية (RSI)]]
* [[أنماط الشموع]]
* [[مؤشر الماكد (MACD)]]
* [[خطوط الاتجاه]]
* [[مؤشر ستوكاستيك (Stochastic Oscillator)]]
* [[مستويات الدعم والمقاومة]]
* [[خطوط فيبوناتشي (Fibonacci Retracements)]]
* [[تحليل الحجم]]
* [[مستويات الدعم والمقاومة (Support and Resistance Levels)]]
* [[مؤشر حجم التداول]]
* [[تحليل حجم التداول (Volume Analysis)]]
* [[تقلبات السوق]]
* [[مؤشر متوسط ​​الحجم (Average Volume)]]
* [[مؤشر ATR]]
* [[مؤشر التوازن على مدار الوقت (On Balance Volume)]]
* [[تحليل الفجوات السعرية]]
* [[مؤشر التدفق النقدي (Money Flow Index)]]
* [[مؤشر ستوكاستيك]]
* [[مؤشر تشايكين (Chaikin Oscillator)]]
* [[مؤشر ويليامز %R]]
* [[مؤشر التجميع والتوزيع (Accumulation/Distribution Line)]]
* [[مؤشر ADX]]
* [[الشموع اليابانية (Candlestick Patterns)]]
* [[مؤشر CCI]]
* [[التحليل الفني الشامل (Comprehensive Technical Analysis)]]
* [[تحليل الموجات إليوت]]
* [[سيكولوجية التداول (Trading Psychology)]]
* [[نظرية التداول الموجهة]]
* [[إدارة المخاطر (Risk Management)]]
 
== موارد إضافية ==


== روابط إضافية ==
* [[Git Documentation]]
* [[Pro Git Book]]
* [[GitHub Learning Lab]]
* [[Atlassian Git Tutorial]]
* [[Git Cheat Sheet]]


* [[Git]]
آمل أن يكون هذا المقال قد قدم لك فهمًا واضحًا لأمر `git reset` وكيفية استخدامه بشكل فعال. تذكر دائمًا توخي الحذر واستخدام النسخ الاحتياطي قبل إجراء أي تغييرات كبيرة على مستودع Git الخاص بك.
* [[Git Log]]
* [[Git Reflog]]
* [[Git Revert]]
* [[Git Branch]]
* [[Git Commit]]
* [[Git Staging Area]]
* [[Git Working Directory]]
* [[Git Clone]]
* [[Git Push]]
* [[Git Pull]]
* [[Git Merge]]
* [[Git Fetch]]
* [[Git Status]]
* [[Git Diff]]


[[Category:الفئة:نظام_التحكم_في_الإصدار]]
[[Category:الفئة:أنظمة_التحكم_في_الإصدار]]


== ابدأ التداول الآن ==
== ابدأ التداول الآن ==

Latest revision as of 01:48, 24 April 2025

Git Reset: دليل شامل للمبتدئين

مقدمة

في عالم أنظمة التحكم في الإصدار، يعتبر Git أداة قوية ومرنة لإدارة التغييرات في الكود. أحد الأوامر الأساسية في Git، ولكنه قد يكون مربكًا للمبتدئين، هو الأمر `git reset`. يتيح لك هذا الأمر التراجع عن التغييرات التي تم إجراؤها في مستودع Git، ولكن بطرق مختلفة. هذا المقال يهدف إلى شرح الأمر `git reset` بالتفصيل، مع التركيز على كيفية استخدامه بشكل فعال وآمن.

ما هو Git Reset؟

ببساطة، `git reset` هو أمر يغير مؤشر الفرع الحالي (branch) ليشير إلى commit آخر. هذا يعني أنه يمكنك "إعادة ضبط" فرعك إلى حالة سابقة، مما يؤدي إلى إزالة commits من تاريخ الفرع. ومع ذلك، فإن الطريقة التي يتم بها إزالة هذه الـ commits، وما يحدث للملفات المتأثرة، يعتمد على الخيارات التي تستخدمها مع الأمر `git reset`.

أوضاع Git Reset المختلفة

هناك ثلاثة أوضاع رئيسية لأمر `git reset`:

  • --soft : هذا الوضع هو الأقل تدميراً. يقوم بتحريك مؤشر الفرع ليشير إلى commit آخر، ولكن يحتفظ بالتغييرات التي تم إجراؤها في منطقة التدريج (staging area) ومجلد العمل (working directory). بمعنى آخر، التغييرات لا تزال موجودة كملفات معدلة جاهزة للتسجيل (commit).
  • --mixed : هذا هو الوضع الافتراضي إذا لم تحدد أي وضع. يقوم بتحريك مؤشر الفرع ليشير إلى commit آخر، ويقوم بإزالة التغييرات من منطقة التدريج، ولكن يحتفظ بها في مجلد العمل كملفات غير متتبعة (untracked). بمعنى آخر، التغييرات لا تزال موجودة في ملفاتك، ولكنك تحتاج إلى إضافتها مرة أخرى إلى منطقة التدريج قبل التسجيل.
  • --hard : هذا الوضع هو الأكثر تدميراً. يقوم بتحريك مؤشر الفرع ليشير إلى commit آخر، ويقوم بإزالة التغييرات من منطقة التدريج ومجلد العمل. بمعنى آخر، التغييرات **تُفقد** بشكل دائم (إلا إذا كانت موجودة في commits أخرى أو في نسخة احتياطية).
أوضاع Git Reset
الوضع منطقة التدريج مجلد العمل وصف --soft يحتفظ بالتغييرات يحتفظ بالتغييرات يحرك المؤشر مع الاحتفاظ بالتغييرات المسجلة --mixed يزيل التغييرات يحتفظ بالتغييرات يحرك المؤشر ويزيل التغييرات من منطقة التدريج --hard يزيل التغييرات يزيل التغييرات يحرك المؤشر ويزيل التغييرات تماماً

أمثلة عملية

لنفترض أن لديك تاريخ commit بسيط:

``` A -- B -- C (HEAD) ```

حيث `HEAD` يشير إلى أحدث commit في الفرع الحالي.

  • git reset --soft HEAD^ : سينقل `HEAD` إلى commit `B`. التغييرات التي تم إجراؤها في commit `C` ستكون موجودة في منطقة التدريج.
  • git reset --mixed HEAD^ : سينقل `HEAD` إلى commit `B`. التغييرات التي تم إجراؤها في commit `C` ستكون موجودة في مجلد العمل كملفات معدلة غير مسجلة.
  • git reset --hard HEAD^ : سينقل `HEAD` إلى commit `B`. التغييرات التي تم إجراؤها في commit `C` **ستُفقد**.

متى تستخدم Git Reset؟

  • التراجع عن commit خاطئ : إذا قمت بتسجيل commit يحتوي على أخطاء، يمكنك استخدام `git reset --soft HEAD^` للتراجع عنه وإصلاح الأخطاء ثم إعادة تسجيله.
  • إلغاء التسجيل (uncommit) للتغييرات : إذا قمت بتسجيل تغييرات لا تريدها، يمكنك استخدام `git reset --mixed HEAD^` لإزالة التغييرات من منطقة التدريج.
  • إعادة ضبط الفرع إلى حالة سابقة : إذا كنت تريد التخلص من سلسلة من commits، يمكنك استخدام `git reset --hard <commit_hash>` لإعادة ضبط الفرع إلى commit معين. **كن حذرًا جدًا عند استخدام هذا الوضع، حيث أن التغييرات ستُفقد.**

Git Reset مقابل Git Revert

من المهم التمييز بين `git reset` و `git revert`. بينما يقوم `git reset` بتغيير تاريخ الفرع، فإن `git revert` يقوم بإنشاء commit جديد يعكس التغييرات التي تم إجراؤها في commit معين. لذلك، `git revert` هو خيار أكثر أمانًا إذا كنت تريد التراجع عن التغييرات في فرع مشترك (shared branch)، حيث أنه لا يعيد كتابة التاريخ. راجع Git Revert للحصول على مزيد من المعلومات.

اعتبارات هامة

  • الحذر مع --hard : استخدم `git reset --hard` بحذر شديد، خاصة إذا كنت تعمل على فرع مشترك. قد يؤدي فقدان التغييرات إلى مشاكل للآخرين.
  • النسخ الاحتياطي : قبل إجراء أي عملية `git reset`، خاصة إذا كنت تستخدم الوضع `--hard`، تأكد من أن لديك نسخة احتياطية من عملك.
  • فهم التاريخ : تأكد من أنك تفهم تاريخ الفرع قبل إجراء أي عملية `git reset`. استخدم الأمر `git log` لعرض التاريخ.

استراتيجيات تداول ذات صلة

التحليل الفني وحجم التداول

موارد إضافية

آمل أن يكون هذا المقال قد قدم لك فهمًا واضحًا لأمر `git reset` وكيفية استخدامه بشكل فعال. تذكر دائمًا توخي الحذر واستخدام النسخ الاحتياطي قبل إجراء أي تغييرات كبيرة على مستودع Git الخاص بك.

ابدأ التداول الآن

سجل في IQ Option (الحد الأدنى للإيداع $10) افتح حساباً في Pocket Option (الحد الأدنى للإيداع $5)

انضم إلى مجتمعنا

اشترك في قناة Telegram الخاصة بنا @strategybin للحصول على: ✓ إشارات تداول يومية ✓ تحليلات استراتيجية حصرية ✓ تنبيهات باتجاهات السوق ✓ مواد تعليمية للمبتدئين

Баннер