وضع نموذجي:
feature-branchmain (زملاؤك يدفعون)mainاستراتيجيتان ممكنتان:
mkdir demo-merge && cd demo-merge && git init
# قاعدة مشتركة
echo "print('app v1')" > app.py
git add . && git commit -m "Version initiale"
# فرع الميزة
git checkout -b feature-login
echo "print('login system')" > login.py
git add . && git commit -m "Add login"
echo "print('login v2')" > login.py
git add . && git commit -m "Improve login"
# main يتقدّم في الأثناء
git checkout main
echo "print('app v1.1')" > app.py
git add . && git commit -m "Update main app"git merge feature-login* Merge branch 'feature-login'
|\
| * Improve login
| * Add login
* | Update main app
|/
* Version initialeالسجل: يُظهر بوضوح أنه كان هناك خطّان تطوير متوازيان.
mkdir demo-rebase && cd demo-rebase && git init
# نفس الإعداد السابق...
echo "print('app v1')" > app.py
git add . && git commit -m "Version initiale"
git checkout -b feature-login
echo "print('login system')" > login.py
git add . && git commit -m "Add login"
echo "print('login v2')" > login.py
git add . && git commit -m "Improve login"
git checkout main
echo "print('app v1.1')" > app.py
git add . && git commit -m "Update main app"git checkout feature-login
git rebase main # «ينقل» إيداعاتك بعد main
git checkout main
git merge feature-login # Fast-forward merge* Improve login
* Add login
* Update main app
* Version initialeالسجل: خطّي، كأنك طوّرت بعد تحديثات main.
| الجانب | الدمج | إعادة الأساس |
|---|---|---|
| السجل | يُظهر فروعاً متوازية | خطّي ونظيف |
| إيداع الدمج | نعم، يُنشأ تلقائياً | لا، fast-forward |
| التعقيد | بسيط | أعقد |
| التعارضات | حلّها مرة واحدة | ربما عدة مرات |
| القابلية للتتبّع | ترى متى أُنشئت الميزة ودُمجت | كأن التطوير كان متسلسلاً |
الدمج:
A---B---C main
/ \
D---E---F---G feature (merge commit G)إعادة الأساس:
A---B---C---D'---E'---F' main (commits D,E,F "déplacés")الأمر:
git checkout main
git merge feature-branchالأمر:
git checkout feature-branch
git rebase main
git checkout main
git merge feature-branch # Fast-forwardلا تعِد أساساً أبداً لإيداعات سبق مشاركتها/دفعها!
كلاهما يعمل. المهم = الاتساق داخل الفريق!