انتقل إلى المحتوى

ورقة أوامر Git

أوامر Git الأكثر استخدامًا مجموعة هنا في جداول حسب المهمة: الإعداد الأول، وإنشاء repository أو تنفيذ clone، والتغييرات اليومية بـ git add وgit commit، والـ branches، والمزامنة بـ push وpull، والتراجع عن الخطأ، والـ tags والـ stash. استبدل <file> و<branch> وأشباهها بقيمك، ونفّذ كل أمر في الطرفية داخل مجلد المشروع. للشرح خطوة بخطوة ابدأ من مسار البداية.

الإعداد

الأمر ماذا يفعل
git config --global user.name "اسمك" يضبط اسمك الذي يظهر في الـ commits على كل الجهاز
git config --global user.email "[email protected]" يضبط بريدك؛ اجعله البريد نفسه المسجَّل في ليڤانت غيت
git config --global init.defaultBranch main يجعل اسم الـ default branch هو main في الـ repositories الجديدة
git config --global core.autocrlf true على ويندوز: يحوّل نهايات الأسطر تلقائيًا
git config --list يعرض كل الإعدادات الحالية
git --version يعرض إصدار Git المثبَّت

الإنشاء والـ clone

الأمر ماذا يفعل
git init يحوّل المجلد الحالي إلى repository جديد
git clone https://levantgit.com/<user>/<repo>.git ينزّل نسخة من repository على ليڤانت غيت عبر HTTPS
git clone [email protected]:<user>/<repo>.git ينزّل النسخة عبر SSH (يحتاج مفتاح SSH)
git clone <url> <folder> ينزّل النسخة إلى مجلد باسم تختاره
git clone --depth 1 <url> ينزّل آخر commit فقط بلا تاريخ كامل (أسرع وأصغر)

التغييرات اليومية

الأمر ماذا يفعل
git status يعرض الملفات المعدَّلة والتي في الـ staging area وغير المتتبَّعة
git add <file> يضيف ملفًا إلى الـ staging area
git add . يضيف كل التعديلات في المجلد الحالي وما تحته
git add -p يضيف أجزاء من الملف تفاعليًا، جزءًا جزءًا
git commit -m "رسالة" ينشئ commit لما في الـ staging area مع رسالة
git commit -am "رسالة" يضيف الملفات المتتبَّعة المعدَّلة وينشئ الـ commit في خطوة واحدة
git commit --amend يعدّل آخر commit (الرسالة أو الملفات) قبل الـ push
git diff الـ diff بين الـ working directory والـ staging area
git diff --staged الـ diff بين الـ staging area وآخر commit
git rm <file> يحذف الملف من المجلد ومن تتبّع Git معًا
git rm --cached <file> يوقف تتبّع الملف ويبقيه على القرص (مفيد مع .gitignore)
git mv <old> <new> يعيد تسمية ملف أو ينقله مع إبقاء تاريخه

Branches

الأمر ماذا يفعل
git branch يعرض الـ branches المحلية ويعلّم الحالي
git branch -a يعرض الـ branches المحلية والتي على الـ remote
git switch <branch> ينتقل إلى branch موجود
git switch -c <branch> ينشئ branch جديدًا وينتقل إليه
git switch - يعود إلى الـ branch السابق
git merge <branch> ينفّذ merge للـ branch المذكور في الـ branch الحالي
git merge --abort يلغي merge توقّف بسبب merge conflict
git rebase main ينفّذ rebase: يعيد بناء commits الـ branch فوق main
git branch -d <branch> يحذف branch محليًا بعد دمجه
git branch -D <branch> يحذف branch محليًا بالقوة حتى لو لم يُدمج
git branch -m <new-name> يعيد تسمية الـ branch الحالي

المزامنة مع الـ remote

الأمر ماذا يفعل
git remote -v يعرض الـ remotes وروابطها
git remote add origin <url> يربط repository محليًا بآخر على ليڤانت غيت باسم origin
git remote set-url origin <url> يبدّل رابط origin (مثلًا عند الانتقال إلى ليڤانت غيت)
git fetch ينفّذ fetch: يجلب تعديلات الـ remote دون دمجها في الـ branch
git pull ينفّذ pull: fetch ثم merge في الـ branch الحالي
git pull --rebase ينفّذ pull مع rebase لـ commits فوق تعديلات الـ remote بدل commit دمج
git push يرسل الـ commits من الـ branch الحالي إلى الـ remote
git push -u origin <branch> يرسل branch جديدًا ويربطه بالـ remote؛ بعدها يكفي git push
git push origin --delete <branch> يحذف branch من الـ remote
git push --force-with-lease force push يرفض محو عمل دفعه غيرك؛ للـ branches الشخصية فقط

التراجع

الأمر ماذا يفعل
git restore <file> يلغي تعديلات الملف التي لم تدخل في commit بعد (لا رجعة فيه)
git restore --staged <file> يخرج الملف من الـ staging area ويبقي التعديل
git revert <commit> ينفّذ revert: ينشئ commit جديدة تعكس commit سابقة؛ آمن بعد الـ push
git reset --soft HEAD~1 ينفّذ reset: يلغي آخر commit ويبقي تعديلاتها في الـ staging area
git reset --hard HEAD~1 يلغي آخر commit ويمحو تعديلاتها نهائيًا
git reset --hard origin/main يجعل الـ branch مطابقًا للـ remote تمامًا ويمحو ما عداه
git clean -fd يحذف الملفات والمجلدات غير المتتبَّعة
git reflog يعرض كل تحرّكات HEAD؛ طوق النجاة لاستعادة ما ظننته ضائعًا

Tags

الأمر ماذا يفعل
git tag يعرض الـ tags
git tag v1.0.0 ينشئ lightweight tag على الـ commit الحالية
git tag -a v1.0.0 -m "الإصدار الأول" ينشئ annotated tag برسالة (مناسب للإصدارات)
git push origin v1.0.0 يرسل tag واحدًا إلى ليڤانت غيت
git push --tags يرسل كل الـ tags
git tag -d v1.0.0 يحذف tag محليًا

الاستعلام والفحص

الأمر ماذا يفعل
git log الـ log الكامل للـ commits
git log --oneline الـ log مختصرًا: سطر لكل commit
git log --oneline --graph --all الـ log مع رسم كل الـ branches
git log -p <file> تاريخ ملف واحد مع الـ diffs
git show <commit> تفاصيل commit واحدة وتعديلاتها
git blame <file> blame: من عدّل كل سطر ومتى
git grep "نص" يبحث عن نص في الملفات المتتبَّعة
git stash list يعرض قائمة الـ stash (انظر القسم التالي)

Stash

الأمر ماذا يفعل
git stash ينفّذ stash: يخفي تعديلاتك التي لم تدخل في commit لتنظيف الـ working directory مؤقتًا
git stash -u ينفّذ stash مع الملفات غير المتتبَّعة أيضًا
git stash pop يعيد آخر stash ويحذفه من القائمة
git stash apply يعيد آخر stash ويبقيه في القائمة
git stash drop يحذف آخر stash

نصيحة

git <command> --help يفتح الدليل الكامل لأي أمر، وgit status يقترح دائمًا الخطوة التالية المناسبة لحالتك.

أسئلة شائعة

ما أهم أوامر Git للمبتدئين؟

خمسة أوامر تكفي للبداية: git init يحوّل مجلدك إلى repository، وgit add يجهّز الملفات، وgit commit -m يحفظ لقطة منها، وgit push يرسلها إلى ليڤانت غيت، وgit status يخبرك أين أنت في كل لحظة. أضف إليها git clone لتنزيل مشروع قائم، وgit pull لجلب تعديلات غيرك.

ما الفرق بين git fetch و git pull؟

git fetch يجلب تعديلات الـ remote إلى جهازك دون أن يغيّر ملفاتك، فتراجعها قبل أن تقرّر. أمّا git pull فينفّذ fetch ثم merge مباشرة في الـ branch الحالي، فتتغيّر ملفاتك فورًا وقد يقع merge conflict. استخدم fetch حين تريد الاطّلاع فقط، وpull حين تريد التحديث الفعلي.

كيف أتراجع عن آخر commit؟

إن لم تنفّذ push بعد، فـ git reset --soft HEAD~1 يلغي الـ commit ويبقي تعديلاتها في الـ staging area، وgit reset --hard HEAD~1 يمحوها نهائيًّا بلا رجعة. أمّا إن كانت الـ commit مدفوعة إلى ليڤانت غيت فاستخدم git revert <commit>: ينشئ commit جديدة تعكسها دون إعادة كتابة تاريخ يشاركك فيه غيرك.

كيف أنشئ branch جديدًا وأنتقل إليه؟

git switch -c <branch> ينشئ الـ branch وينقلك إليه في خطوة واحدة، وgit switch <branch> ينتقل إلى branch موجود، وgit switch - يعيدك إلى السابق. ولإرسال الـ branch الجديد إلى ليڤانت غيت أول مرة نفّذ git push -u origin <branch>؛ بعدها يكفي git push وحده في كل مرة.

كيف أربط مشروعي المحلي بـ repository على ليڤانت غيت؟

أنشئ الـ repository من الواجهة، ثم في مجلد مشروعك نفّذ git remote add origin مع رابط الـ repository، ثم git push -u origin main. وإن كان origin مضبوطًا على خدمة أخرى فبدّل عنوانه بـ git remote set-url origin <url> بدل إضافته من جديد. تحقّق دائمًا بـ git remote -v قبل الـ push.

ماذا بعد؟