الـ branch مش نسخة من المشروع. هو اسم لازق على commit واحد، وبيتحرك لقدام لوحده كل ما تعمل commit جديد.
عشان كده عمل branch في Git سريع جدًا ومش بياخد مساحة: Git بيكتب hash في ملف صغير، وخلاص.
شكلها عامل إزاي
A ← B ← C ← main ↖ D ← E ← feature/cart
main لازق على C، و feature/cart لازق على E. الاتنين بيشاركوا نفس التاريخ لحد C، وبعد كده كل واحد مشي في طريق.
الـ HEAD
الـ HEAD هو “إنت واقف فين دلوقتي”. غالبًا بيشاور على branch، والـ branch بيشاور على commit.
git switch -c feature/cart # اعمل branch جديد وروحلهgit switch main # ارجع لـ maingit branch # كل الـ branches، والنجمة جنب اللي إنت عليه
لما تعمل commit، الـ branch اللي الـ HEAD بيشاور عليه هو اللي بيتحرك للـ commit الجديد. الـ branches التانية مبتتحركش.
switch ولا checkout؟
git checkout قديم وبيعمل حاجات كتير: يغيّر branch، ويرجّع ملف، ويروح لـ commit. عشان كده اتقسم في Git 2.23 لأمرين أوضح:
git switch: تغيّر الـ branch.git restore: ترجّع ملف (فصل ٦).
checkout لسه شغال، وهتلاقيه في كل حتة على الإنترنت، بس الجداد أوضح.
الـ detached HEAD
لو عملت git switch --detach a3f9c21 أو git checkout a3f9c21، الـ HEAD بيشاور على commit مباشرة، مش على branch. ده اسمه detached HEAD.
ده مفيد عشان تبص على الكود القديم. بس لو عملت commits وإنت كده، مفيش branch بيتحرك معاك. ولو رحت لـ branch تاني، الـ commits دي ملهاش اسم، وممكن تتوه.