ورقة أوامر 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؛ طوق النجاة لاستعادة ما ظننته ضائعًا |
| الأمر |
ماذا يفعل |
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.
ماذا بعد؟