عايز تعرف إيه اللي اتغير
git status، و git diff، و git diff --stagedعايز تحط جزء من ملف بس في الـ commit
git add -pعايز تشتغل على حاجة جديدة
git switch -c feature/nameعملت commits وإنت detached HEAD
git 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 truebranch مشترك مع حدmerge بس. ممنوع rebase
عملت rebase لـ branch بتاعك واترفع قبل كده
git push --force-with-leaseعايز merge commit حتى لو ينفع fast-forward
git merge --no-ffconflictحل، وامسح العلامات، و
git add، وبعدين commit أو --continueاتلخبطت في نص merge أو rebase
git merge --abort أو git rebase --abortcommits كتير زي wip و typo قبل الـ PR
git rebase -i main بـ squash و fixupتصليح لـ commit قديم
git commit --fixup <hash> و rebase -i --autosquashعايز ترمي تعديلات ملف
git restore file، ومفيهوش رجوععايز تطلّع ملف من الـ staging
git restore --staged fileنسيت حاجة في آخر commit
git commit --amend، قبل الـ pushعايز تفك آخر commit وتحتفظ بالشغل
git reset HEAD~1commit غلط اترفع على main
git revert <hash>ضيعت commits بعد reset أو rebase
git reflogلازم تسيب شغلك ساعة
git stash push -m، وبعدين git stash popمحتاج commit واحد بس من branch تاني
git cherry-pick <hash>hotfix وإنت في نص feature
git 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 تاني شغال في نفس الوقت.