الآخر

Cheat Sheet: لو المشكلة… فكّر في…

one page recall for Git
🎯 الهدف: تلم مفاهيم Git كلها في صفحة واحدة، وتختبر نفسك.
عايز تعرف إيه اللي اتغيرgit status، و git diff، و git diff --staged
عايز تحط جزء من ملف بس في الـ commitgit add -p
عايز تشتغل على حاجة جديدةgit switch -c feature/name
عملت commits وإنت detached HEADgit switch -c name قبل ما تمشي
عايز تعرف الجديد على GitHub من غير ما تلمس شغلكgit fetch، وبعدين git log main..origin/main
أول push لـ branch جديدgit push -u origin name
الـ push اترفضgit pull وبعدين git push. مش --force
عايز تجيب آخر main في الـ feature بتاعكgit rebase main لو الـ branch لوحدك، أو git merge main
الـ pull بيعمل merge commits كتيرgit pull --rebase، أو pull.rebase true
branch مشترك مع حدmerge بس. ممنوع rebase
عملت rebase لـ branch بتاعك واترفع قبل كدهgit push --force-with-lease
عايز merge commit حتى لو ينفع fast-forwardgit merge --no-ff
conflictحل، وامسح العلامات، و git add، وبعدين commit أو --continue
اتلخبطت في نص merge أو rebasegit merge --abort أو git rebase --abort
commits كتير زي wip و typo قبل الـ PRgit rebase -i main بـ squash و fixup
تصليح لـ commit قديمgit commit --fixup <hash> و rebase -i --autosquash
عايز ترمي تعديلات ملفgit restore file، ومفيهوش رجوع
عايز تطلّع ملف من الـ staginggit restore --staged file
نسيت حاجة في آخر commitgit commit --amend، قبل الـ push
عايز تفك آخر commit وتحتفظ بالشغلgit reset HEAD~1
commit غلط اترفع على maingit revert <hash>
ضيعت commits بعد reset أو rebasegit reflog
لازم تسيب شغلك ساعةgit stash push -m، وبعدين git stash pop
محتاج commit واحد بس من branch تانيgit cherry-pick <hash>
hotfix وإنت في نص featuregit worktree add -b hotfix/x ../folder main
تراجع PR من غير ما تلمس شغلكworktree على الـ branch بتاعه
كذا AI agent شغالين في نفس الوقتworktree لكل agent

الامتحان

🧠 اختبر نفسك
١) الـ commit بيخزن إيه؟
snapshot كامل للمشروع، والكاتب، والتاريخ، والرسالة، والـ parent.
٢) الـ branch بياخد مساحة قد إيه؟
تقريبًا ولا حاجة. هو ملف صغير فيه hash commit.
٣) git status قال up to date. يبقى زي GitHub؟
مش شرط. بيقارن بـ origin/main من آخر fetch.
٤) إيه اللي بيختلف بين merge و rebase؟
شكل التاريخ بس. الكود في الآخر واحد.
٥) ليه الـ rebase بيغيّر الـ hashes؟
لأنه بيعمل commits جديدة بـ parent جديد.
٦) إيه القاعدة الذهبية للـ rebase؟
متعملش rebase لـ commits حد تاني عنده.
٧) --force-with-lease أأمن من --force ليه؟
بيرفض الـ push لو حد رفع حاجة جديدة من آخر fetch عندك.
٨) reset ولا revert لـ commit على main المشترك؟
revert.
٩) إيه الحاجة اللي reflog مش هيقدر يرجعها؟
التعديلات اللي متعملهاش commit أصلًا.
١٠) الفرق بين stash و worktree؟
الـ stash بيشيل الشغل في نفس الفولدر. الـ worktree فولدر تاني على branch تاني شغال في نفس الوقت.

خلّصت المذكرة لما