ورقة Git مرجعية قابلة للبحث تغطي الإعداد وحلقة الالتزام اليومية والتفرع والمستودعات البعيدة والتاريخ والاسترداد، مع نسخ بنقرة واحدة لكل أمر.
تسعة وأربعون أمر Git تستحق الحفظ. صفِّ عبر أسماء الأوامر وأوصافها، ثم انسخ الذي تحتاجه. مجمعة حسب الإعداد وسير العمل اليومي والتفرع والمستودعات البعيدة والتاريخ وتراجع الأخطاء.
لا يوجد أمر يطابق هذا التصفية.
فهم أوامر Git التي تستخدمها يوميًا
ما الغرض من ورقة Git المرجعية فعليًا
يمتلك Git أكثر من مئة أمر porcelain، لكن معظم المهندسين يستخدمون العشرين أو الثلاثين نفسها يوميًا ويلجؤون إلى الباقي بضع مرات في السنة. ورقة الغش ليست بديلاً عن فهم النموذج؛ بل توجد بحيث تبقى الأوامر التي تفهمها بالفعل على بُعد ضغطة واحدة بدلاً من بُعد تبويب متصفح وثلاث إجابات من Stack Overflow.
المرجع في هذه الصفحة مجمّع بالطريقة التي يحدث بها العمل فعلًا: إعداد مستودع، حلقة الالتزام التي تشغّلها عشرات المرات يوميًا، التفرع، التواصل مع مستودع بعيد، قراءة التاريخ، وإخراج نفسك من المشاكل. اكتب في مربع التصفية وستضيق القائمة عبر نص الأمر ووصفه معًا، لذا فإن البحث عن "stash" أو "force" أو "undo" يُظهر الصفوف ذات الصلة فورًا. كل صف يحتوي على زر نسخ، لأن إعادة كتابة أمر يحتوي على --force-with-lease هو بالضبط كيف تحدث الأخطاء المطبعية.
النموذج الذهني وراء الأوامر
يكاد كل أمر Git يصبح منطقيًا عندما تحفظ ثلاثة أماكن في ذهنك. شجرة العمل هي الملفات الموجودة على القرص كما تراها في محررك. المؤشر — الذي يُسمى أيضًا منطقة الترحيل — هو اللقطة التي تجمعها للالتزام التالي. المستودع هو السلسلة الثابتة من الالتزامات المسجلة بالفعل. ينقل git add المحتوى من شجرة العمل إلى المؤشر، ويحوّل git commit المؤشر إلى التزام جديد، ويدفع git restore المحتوى في الاتجاه المعاكس.
الفروع هي الفكرة الثانية، وهي أبسط مما تبدو: الفرع مجرد مؤشر متحرك إلى التزام واحد، وHEAD مؤشر إلى الفرع الذي أنت عليه. إنشاء فرع لا يكلف شيئًا لأنه يكتب ملفًا واحدًا يحتوي على تجزئة من أربعين حرفًا. ولهذا السبب فإن git switch -c رخيص بما يكفي لاستخدامه في تجربة مدتها خمس دقائق.
الدمج وإعادة القاعدة يجمعان عمل فرعين؛ ويختلفان فيما يسجلانه. يحافظ الدمج على التاريخين معًا ويضيف التزامًا يربطهما، وهو أمر صريح لكنه ينتج رسمًا بيانيًا مضفرًا. أما إعادة القاعدة فتعيد كتابة التزاماتك بحيث تبدو وكأنها كُتبت فوق الفرع الآخر، وهو ما ينتج خطًا مستقيمًا نظيفًا لكنه يغيّر تجزئات الالتزام — وهذا بالضبط سبب عدم إعادة قاعدة التزامات سحبها آخرون بالفعل.
الاسترداد عند حدوث خطأ
أكثر معلومة مفيدة عن Git هي أنه نادرًا ما يفقد العمل الملتزم. طالما تم التزام تغيير ما في وقت ما، سيُظهر لك git reflog التجزئة، وسيعيده git switch -c rescue <hash>. تغطي شبكة الأمان هذه عمليات إعادة القاعدة الفاشلة وreset --hard العرضي بعد الالتزام والفروع المحذوفة بحماس زائد.
العمليات الخطيرة هي التي تمس العمل غير الملتزم: git reset --hard وgit checkout -- على ملف معدل وgit clean -fd. لم تُسجل أي من تلك التغييرات أبدًا، فلا يوجد ما يشير إليه reflog. العادة الجديرة بالبناء هي الالتزام مبكرًا وبشكل متكرر على فرع مؤقت، أو تشغيل git stash push قبل أي تجربة. الالتزام الذي تسحقه لاحقًا لا يكلف شيئًا؛ أما فترة بعد الظهر من العمل غير الملتزم فلا تعود.
على الفروع المشتركة، فضّل git revert على إعادة كتابة التاريخ. فهو يسجل التزامًا جديدًا يعكس الالتزام القديم، لذا تبقى نسخة أي شخص آخر صالحة. احتفظ بـ --force-with-lease لفروع ميزاتك الخاصة، ولاحظ أنه أكثر أمانًا بشكل ملموس من --force العادي: فهو يرفض العمل إذا تحرك الفرع البعيد منذ آخر مرة جلبته، وهو بالضبط الحالة التي قد يدمر فيها الدفع القسري العادي التزامات زميل بصمت.
الأسئلة الشائعة
هل تعمل هذه الأوامر على Windows وmacOS وLinux؟
نعم. كل إدخال هو Git عادي ويتصرف بشكل متطابق على الأنظمة الثلاثة، سواء شغّلته في PowerShell أو Command Prompt أو Terminal أو أي صدفة Linux. الاختلافات الوحيدة التي قد تلاحظها هي معالجة نهايات الأسطر، التي يتحكم فيها core.autocrlf، وقواعد اقتباس الوسائط التي تحتوي على مسافات.
ما الفرق بين git switch وgit checkout؟
كان git checkout يقوم تاريخيًا بمهمتين غير مرتبطتين: التنقل بين الفروع واستعادة الملفات. قسّم Git 2.23 هذه إلى git switch للفروع وgit restore للملفات. لا يزال checkout يعمل ولم يُهمل، لكن switch وrestore أوضح ويصعب إساءة استخدامهما بالخطأ.
متى يجب أن أعيد القاعدة بدل الدمج؟
أعد قاعدة فرع الميزة الخاص غير المنشور على أحدث main للحفاظ على تاريخ خطي ومراجعات مقروءة. ادمج عندما يكون الفرع مشتركًا، أو عندما تكون الالتزامات قد دُفعت بالفعل، أو عندما تريد أن يُظهر السجل التاريخي أن خطي عمل سارا بالتوازي.
كيف أستعيد التزامًا حذفته عن طريق الخطأ؟
شغّل git reflog لرؤية كل موضع احتله HEAD، وابحث عن تجزئة الالتزام الذي تريده، ثم شغّل git switch -c rescue <hash>. يعمل هذا للالتزامات المفقودة بسبب إعادة قاعدة فاشلة أو إعادة ضبط كاملة أو فرع محذوف، ما دامت ميزة جمع البيانات المهملة لم تعمل، وهو ما يمنحك عادةً 30 يومًا على الأقل.
هل git push --force-with-lease أكثر أمانًا حقًا من --force؟
نعم، وبشكل ملموس. يقوم --force العادي باستبدال الفرع البعيد دون قيد أو شرط. يتحقق --force-with-lease أولاً من أن الفرع البعيد ما زال عند الالتزام الذي جلبته آخر مرة، ويتوقف إذا دفع شخص آخر في هذه الأثناء، وهو بالضبط الموقف الذي قد يدمر فيه الدفع القسري عمل زميل.
هل يغادر أي شيء أكتبه في مربع التصفية متصفحي؟
لا. ورقة الغش هي كتلة صغيرة من البيانات مضمّنة في الصفحة، والتصفية هي مجرد مطابقة نصية بلغة JavaScript. لا توجد أي طلبات أو استدعاءات تحليلات أو خادم بمجرد تحميل الصفحة.