ကျနော်နှင့် GitFlow (စတုထ္တပိုင်း) cherry-pick

Kevin Kyaw
newborn.ninja
Published in
2 min readMay 17, 2020

မနေ့ကတော့ ကျနော် frontend translation ဘယ်လို အလုပ်လုပ်လဲပြောပြီးပါပြီ။ တစ်ခုပြောဖို့မေ့နေခဲ့ပါတယ်။ Javascript ရဲ့ default alert တွေ၊ confirmation dialog တွေအတွက် OK, Cancel Button တွေအတွက်တော့ ဒီ translation အလုပ်မလုပ်ပါဘူး။

မဖတ်လိုက်ရသူတွေအတွက်က ဒီမှာပါ။ http://tiny.cc/l106oz

ကျနော် cherry-pick အကြောင်းကို ပထမပိုင်းမှာ အကြမ်းပြောခဲ့ပြီးပါပြီ။ cherry-pick ဆိုတာကတော့ ကိုယ်လိုချင်တဲ့ commit လေးပဲ ရွေးပြီးယူတဲ့အပိုင်းပါ။ branch တစ်ခုထဲမှာ ပထမ commit တွေကအများကြီးရှိနေမယ်။ ဆိုကြပါစို့။ Login form တစ်ခုကို ၂ ရက်ရေးလိုက်ရမယ်။ တစ်ရက်ပြီးတဲ့အချိန်မှာ first commit လုပ်မယ်။ အားလုံးပြီးသွားတဲ့အချိန်မှာ ဒုတိယ commit လုပ်မယ်။ နောက်ပိုင်း code refactor လုပ်ပြီးတဲ့အချိန်မှာ တတိယ commit ထပ်လုပ်မယ်။ commit သုံးခု ရှိသွားပါပြီ။

အားလုံးပြီးသွားလို့ develop branch ထဲထည့်ပြီး final testing လုပ်မယ်ဆိုရင် ကျနော်တို့ merge လုပ်မယ်။ ကျနော်ပြောခဲ့တဲ့ straight line ပြဿနာတွေ ရှိလာနိုင်ပါတယ်။ နောက်ပြီး develop မှာ ပေါင်းပြီးခါမှ ကိုယ့် login feature ကြီးက testing pass မဖြစ်ဘူး။ တစ်ခြားအရေးကြီးတဲ့ feature တွေပါနေတဲ့အတွက် release ကလည်း ဒီနေ့လုပ်ကို လုပ်မှရတော့မယ်။ straight line မဖြစ်တဲ့အခါ ကိုယ်က commit သုံခုရှိနေတယ်။ order အစဥ်လိုက်ကလည်း မမှတ်မိတော့ဘူး။ ပြဿနာပေါင်း သောင်းခြောက်ထောက်ပေါ်လာပါပြီ။ ရှေ့မှာ squash အကြောင်းပြောခဲ့သလို ၃ ခု ၁ ခုပေါင်းပြီး ပြောင်းမလား၊ cherry-pick ကို order အတိုင်းလုပ်မလား။ ကိုယ့်ရဲ့လိုအပ်ချက်၊ ကျွမ်းကျင်မှုပေါ်မူတည်ပြီး လုပ်လို့ရတဲ့ နည်းလမ်းတွေ အသုံးချလို့ရပါတယ်။

cherry-pick မှာ အရေးအကြီးဆုံးက အောက်ကနေပြန်လုပ်ရတာပါ။ ကိုယ့်မှာ commit သုံးခုဆိုရင် first commit, ပြီးရင် second commit, နောက်ဆုံးမှ third commit အစဥ်လိုက် လုပ်သွားရပါမယ်။ အောက်က ဥပမာလေးကို ကြည့်ကြည့်ရအောင်။ ဒီလို order အစဥ်လိုက်က ကျနော် develop branch တစ်ခုထဲသုံးပြီး လုပ်ထားတာမဟုတ်ပါ။ feature 3 ကို ကျနော့် ရှေ့ အပိုင်းတွေမှာ ပြောခဲ့သလို သေချာမှန်ကန်တဲ့ ပုံစံတစ်ခုကို ချထားပြီးမှ ရလာတဲ့ ပုံစံဆိုတာ သိထားစေလိုပါတယ်။

ကျနော်က အခု release branch အသစ်တစ်ခုယူပြီး Add FAQ Page ဆိုတဲ့ commit ကလွဲပြီးကျန်တဲ့ commit တွေကို release branch ထဲ ထည့်ချင်ပါတယ်။ cherry-pick လုပ်ကြည့်ပါမယ်။ command က git cherry-pick commithash or branchnameပါ။ ကျနော်ကတော့ branch 2 ခုပဲကျန်တော့တဲ့အတွက် hash နဲ့ပဲ cherry-pick လုပ်ပါမယ်။ တစ်ခုခု conflict ဖြစ်သွားလို့ မသေချာရင် abort လုပ်လို့ရပါတယ်။ Command က

git cherry-pick --abort

ကျနော်အခု master branch ကနေပြီး release branch တစ်ခုယူလိုက်ပါမယ်။

git checkout master
git checkout -b release/20200517
git cherry-pick 71886c6dedc63039ed7002ca8cf20e1b4ec82a92
git cherry-pick 37cb26d2c8d7e935c1c7f20b3aca8cd405c361a0
git cherry-pick 35be910ea1cfb314b51b498cbe258edc3ede69de
git push origin release/20200517
//Now we're going to do to merge to master
git checkout master
git merge release/20200517

Video tutorial လေးကို ဒီမှာ ကြည့်နိုင်ပါတယ်။

ဒါဆို ကျနော်တို့ master branch ကို release လုပ်လို့ရပါပြီ။ release လုပ်ပြီးတာနဲ့ ကျနော့်တို့ develop branch သည် master ရဲ့ branch အောက်မှာ ရှိနေပါတယ်။ master သည် အမြဲတမ်း develop branch နောက်မှာပဲ ရှိသင့်တာ သဘာဝပါ။ ဒါကြောင် rebase ပြန်လုပ်ပါမယ်။

git checkout develop
git rebase master

ဒါကတော့ rebase လုပ်ပြီးသွားရင် မြင်ရတဲ့ screen ပါ။

rebase ဘယ်လိုလုပ်လဲဆိုတဲ့ video ပါ။

အခုလောက်ဆို cherry-pick အကြောင်း ကောင်းကောင်းနားလည်ပြီလို့ ယူဆပါတယ်။

ကျေးဇူးပြုပြီး လက်ခုပ်လေးတွေ တီးပေးခဲ့လိုရပါကြောင်း… ရေးတဲ့လူ အားရှိအောင် :D

နောက်အပတ်တွေမှာ တစ်ခြားဘာရေးပေးရမလဲ စဥ်းစားပြီး တစ်ခုခုတော့ ရေးပေးလို့ရအောင် ကြိုးစားပါမယ်။

ပထမပိုင်း မဖတ်လိုက်ရသူတွေအတွက်က ကျနော်နှင့် GitFlow (ပထမပိုင်း) http://tiny.cc/dk6xoz

ဒုတိယပိုင်း မဖတ်လိုက်ရသူတွေအတွက်က ကျနော်နှင့် GitFlow (ဒုတိယပိုင်း) http://tiny.cc/6k6xoz

တတိယပိုင်း မဖတ်လိုက်ရသူတွေအတွက်က git squash အတွက် Video Tutorial
http://tiny.cc/oi6xoz

--

--