Git: الأخطاء الشائعة وكيفية إصلاحها

إذا كنت قد عملت في أي وقت مضى على مشروع كبير ، حيث تشارك ، بالإضافة إلىك ، العديد من المبرمجين الآخرين ، فمن الواضح أنك استخدمت Git كنظام تحكم في الإصدار. في سياق استخدام شيء ما ، وفقًا لمستوى تعقيد بوابة مماثلة ، يرتكب الجميع الأخطاء.


سوف يناقش مؤلف المادة ، التي ننشر ترجمتها اليوم ، الأخطاء الشائعة التي يرتكبها المبرمجون عند العمل مع Git ، ويتحدث عن كيفية التعامل مع هذه الأخطاء.

خطأ في رسالة الالتزام الأخيرة


بعد عدة ساعات من العمل الجيد ، من السهل ارتكاب خطأ في رسالة الالتزام. لحسن الحظ ، يمكن إصلاح ذلك بسهولة باستخدام الأمر التالي:

git commit --amend 

سيفتح هذا الأمر المحرر ويسمح لك بإجراء تغييرات على آخر رسالة من الالتزام. لا أحد غيرك يجب أن يعرف أنك كتبت "الأمر الأولي" بثلاثة "م".

خطأ في اسم الفرع


لنفترض أن الساعة تقريبًا 15:00 ، وأنك لم تتناول الغداء بعد. ونتيجة لذلك ، بعد أن عذبك الجوع ، سميت فرعًا جديدًا feature-brunch . لذيذ ، لا يمكنك قول أي شيء.

يمكن حل هذه المشكلة أيضًا. يمكنك إعادة تسمية فرع بنفس طريقة إعادة تسمية الملفات باستخدام الأمر mv . حول نقلها إلى مكان جديد بالاسم الصحيح:

 git branch -m feature-brunch feature-branch 

إذا كنت قد أرسلت هذا الموضوع بالفعل إلى المستودع ، فأنت بحاجة إلى القيام ببعض الأشياء الأخرى لإعادة تسميته. يجب حذف الفرع القديم وإرسال الفرع الجديد إلى المستودع:

 git push origin --delete feature-brunch git push origin feature-branch 

إجراء تغييرات عشوائية على الفرع الرئيسي


لنفترض أنك تعمل على ميزة جديدة ، وبسرعة ، نسيت إنشاء فرع جديد لها. لقد ارتكبت بالفعل مجموعة من الملفات وكل هذا يكمن في الفرع master . يمكنك نقل كل هذه التغييرات إلى فرع جديد باستخدام الأوامر الثلاثة التالية. يرجى ملاحظة أنه إذا لم تستخدم ، كما هو مطبق على التغييرات ، أوامر stash أو stash ، stash .

 git branch feature-branch git reset HEAD~ --hard git checkout feature-branch 

ونتيجة لذلك ، سيتم إنشاء فرع جديد ، وسيتم إرجاع التغييرات في الفرع master إلى الحالة التي كان عليها قبل إجراء التغييرات ، وسيتم تنفيذ الانتقال إلى الفرع الجديد ، والذي سيحتوي على جميع التغييرات التي تم إجراؤها سابقًا على master .

العمل مع الملفات التي نسيت إضافتها إلى آخر التزام


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

 git add missed-file.txt git commit --amend 

بعد ذلك ، يمكنك تغيير رسالة الالتزام ، أو تركها كما هي.

إضافة ملف خاطئ إلى المستودع


ماذا لو كان خطأك هو عكس الخطأ السابق بالضبط؟ ماذا لو أضفت ملفًا إلى الفهرس لن تلتزم به؟ يمكن أن يكون ملف ENV ، دليل بناء المشروع ، صورة لكلبك قمت بحفظها عن طريق الخطأ في المجلد الخطأ. يمكن إصلاح كل هذا.

إذا كانت أفعالك تقتصر على فهرسة الملف ، ولكنك لم تلتزم به بعد ، فسيكون من السهل جدًا التعامل مع المشكلة باستخدام أمر reset التعيين:

 git reset /assets/img/misty-and-pepper.jpg 

إذا كنت قد تقدمت بما يكفي وتمكنت من تنفيذ التغيير ، فاعلم أن هذا قابل للإصلاح. عليك فقط استخدام بعض الأوامر الإضافية:

 git reset --soft HEAD~1 git reset /assets/img/misty-and-pepper.jpg rm /assets/img/misty-and-pepper.jpg git commit 

ونتيجة لذلك ، سيتم إلغاء آخر التزام ، سيتم حذف الصورة ، وبعد ذلك سيتم وضع الالتزام الجديد في المكان الذي يجب أن يكون فيه.

ماذا لو سارت الامور بشكل خاطئ؟


تساعد التقنية التي سنناقشها الآن في المواقف التي تسير فيها الأمور بشكل خاطئ. على سبيل المثال ، يحدث هذا عندما تكون حريصًا جدًا على نسخ الحلول الجاهزة باستخدام StackOverflow ، وبعد العمل ، يكون المستودع الخاص بك في حالة أسوأ مما كانت عليه في البداية. ربما وقعنا جميعًا في هذا الوضع.

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

 git reflog 

يتذكر Git جميع أعمالنا وكنتيجة لتنفيذ هذا الأمر ، يمكنك رؤية شيء مثل ما يلي:

 3ff8691 (HEAD -> feature-branch) HEAD@{0}: Branch: renamed refs/heads/feature-brunch to refs/heads/feature-branch 3ff8691 (HEAD -> feature-branch) HEAD@{2}: checkout: moving from master to feature-brunch 2b7e508 (master) HEAD@{3}: reset: moving to HEAD~ 3ff8691 (HEAD -> feature-branch) HEAD@{4}: commit: Adds the client logo 2b7e508 (master) HEAD@{5}: reset: moving to HEAD~1 37a632d HEAD@{6}: commit: Adds the client logo to the project 2b7e508 (master) HEAD@{7}: reset: moving to HEAD 2b7e508 (master) HEAD@{8}: commit (amend): Added contributing info to the site dfa27a2 HEAD@{9}: reset: moving to HEAD dfa27a2 HEAD@{10}: commit (amend): Added contributing info to the site 700d0b5 HEAD@{11}: commit: Addded contributing info to the site efba795 HEAD@{12}: commit (initial): Initial commit 

انتبه إلى العمود الموجود في أقصى اليسار من هذه القائمة. يحتوي على فهارس. إذا كنت بحاجة إلى العودة في وقت ما في الماضي ، dfa27a2 بتشغيل الأمر التالي ، واستبدل {index} بالرابط المناسب ، على سبيل المثال ، dfa27a2 . يبدو هذا الأمر كما يلي:

 git reset HEAD@{index} 

الملخص


نظرنا في بعض الطرق للتعامل مع الأخطاء التي تحدث عند العمل مع Git. نأمل أن لا ترتكب مثل هذه الأخطاء وأن طرق العمل هذه مع Git لن تكون مفيدة لك. وإذا حدث خطأ - ستعرف ماذا تفعل.

أعزائي القراء! هل تعرف أي حيل مثيرة للاهتمام للعمل مع Git؟ إذا كان الأمر كذلك ، يرجى مشاركتها.

Source: https://habr.com/ru/post/ar423015/


All Articles