Kevin Kyaw
newborn.ninja
Published in
3 min readMay 12, 2020

--

ကျနော်နှင့် GitFlow (တတိယပိုင်း) squash

စာရေးသူတို့ရုံးက Work From Home ကို Singapore နိုင်ငံရဲ့ Circuit Breaker Period မတိုင်ခင်ကတည်းက စလုပ်နေတာ ဖြစ်တဲ့အတွက်အခုဆို ၂ လကျော်လာခဲ့ပါပြီ။ အမှန်အတိုင်းပြောရရင် WFH ကပိုပြီး အလုပ်များတယ်လိုတောင် ထင်ရပါတယ်။ Monday to Friday မနက် ၉ နာရီကနေ ညနေ ၆ နာရီအထိ။ lunch တောင် ဝရုန်းသုန်းကား ပြေးစားရာသလိုပါပဲ။ ပထမတော့ Saturday မှ ရေးဖို့ စဥ်းစားထားတာပါ။ ဒါပေမဲ့ အခုတော့ ခဏအားတာနဲ့ squash နဲ့ cherry-pick အကြောင်း ရှင်းပြပေးမယ်လို့ ဆုံးဖြတ်ထားပါတယ်။ squash နဲ့ cherry-pick အကြောင်းကို ပထမပိုင်းမှာ ပြောပြထားပေးပြီးပါပြီ။ ဒီတစ်ခေါက်က Tutorial ပုံစံပါ။

ပထမပိုင်း မဖတ်လိုက်ရသူတွေအတွက်က ကျနော်နှင့် GitFlow (ပထမပိုင်း)

ဒုတိယပိုင်း မဖတ်လိုက်ရသူတွေအတွက်က ကျနော်နှင့် GitFlow (ဒုတိယပိုင်း)

အပေါ်ကပုံအရ ကျနော့်မှာ branch 4 ခုရှိပါတယ်။ feature-01 branch ထဲမှာ commit သုံးခုရှိနေပါတယ်။ တကယ်လို့ ကျနော်က ဒီ commit ၃ခုကို deveop ထဲထည့်ပေါင်းချင်ရင် cherry-pick or merge လုပ်မှရပါမယ်။ Merge တိုက်ရိုက်လုပ်ချင်းကြောင်း straight line မဖြစ်တဲ့ ပြသနာကို ရှေ့မှာ ရှင်းပြထားပြီးပြီ ဖြစ်လို့ Merge အကြောင်း မကောက်တော့ပဲ squash အ ကြောင်း ကြည့်ကြည့်ရအောင်။ ကျနော် squash မလုပ်ပဲ cheery-pick လည်း လုပ်လို့ရပါတယ်။ ဒါပေမဲ့ cherry-pick လုပ်တဲ့ order က အောက်ကနေပြီး အပေါ်ကို အစဥ်လိုက်သွားရပါတယ်။ ဒါမှမဟုတ်ပဲ order မှားသွားပြီးဆို code တွေကျန်ခဲ့ပါမယ်။ ပုံသုံးခုကို ကြည့်ကြည့်ရအောင်။

ပထမဆုံး Commit ပါ
ဒုတိယ Commit ပါ
တတိယ commit ပါ

ကျနော်သာ cherry-pick ကို wrong order နဲ့ လုပ်မိမယ်ဆို conflict တွေရှိလာပါလိမ့်မယ်။ ဥပမာ တတိယ commit ကအရင်၊ ပြီးရင် ပထမ commit၊ ပြီးမှ ဒုတိယ commit ဆို သေချာပါပြီ conflict ဖြစ်သွားပါပြီ။ အခုက code line လေး သုံးလေးခုမိုလို့ ရှင်ရလွယ်တာပါ။ တကယ်လို့ line တွေများလာရင် ဘယ်ဟာကို ယူရမှာလဲဆိုပြီး စိတ်ရှုပ်ရမှာပါ။

ဒီပြသနာရှင်းအောင် cherry-pick မလုပ်ခင် commit 3 ခုကို squash လုပ်ပြီး commit တစ်ခုတည်း အနေနဲ့ ပေါင်းမယ်ပြီးရင် cherry-pick လုပ်မယ်။ ဒါဆို ပိုလွယ်သွားပါပြီ။ လုပ်ကြည့်ရအောင်။ squash လုပ်မယ်ဆို ကိုယ် squash လုပ်ချင်တဲ့ branch မှာရှိနေရပါမယ်။

Command က git rebase -i HEAD~n ဒီ n value က commit ဘယ်နှစ်ခုကို squash လုပ်ချင်တာလဲဆိုတာပါ။ ကျနော်က သုံးခုရှိတဲ့အတွက် video ထဲကအတိုင်း 3 လို့ ရိုက်ထည့်ထားတာပါ။ တကယ်လိုများ ၂ ခုပဲဆို 2 ပေါ့။

squash လုပ်ပြီးတာနဲ့ commit message ပြောင်းပေးရပါတယ်။ Optional ပါ။ ကျနော်က squash လုပ်ထားမှန်းသိအောင် message ပြောင်းထားလိုက်ပါတယ်။ ဒါမှ history အနေနဲ့ ကျန်ခဲ့မှာပါ။ editor က vi သုံးပြီးရေးထားပါတယ်။ တကယ်လို့ ကိုယ်က IDE နဲ့သုံးချင်တယ်ဆို ကျနော် Gitkraken သုံးပါတယ်။ ပြီးတာနဲ့ ကျနော့်တို့က remote branch အတွက်လည်း push လုပ်ရပါမယ်။ push လုပ်ကြည့်ရအောင်။ Command က git push origin branchname ဘာကြီးပေါ်လာတာလဲ.. မကြောက်ပါနဲ့ 😭။ ကျနော်တို့ local branch မှာ ရှိတဲ့ commit history နဲ့ remote branch မှာရှိတဲ့ commit history ကမတူတော့ပါဘူး။ ဒါကြောင့် force push လုပ်ရပါမယ်။ ဒါမှာ up to date ဖြစ်မှာပါ။

force push လုပ်ပါပြီ။ Command က git push — force origin branchname

Result လေးကြည့်လိုက်ရအောင်။ ကျနော် ရေးထားတဲ့ message လေးပါပါသေးတယ်နော် :D

နောက်ဆုံး code တွေက dashboard.php ထဲမှာ

<?php
echo “This is dashboard and report page”;
echo “This is line break”;
echo “This is line break”;
?>

အဆင်ပြေကမယ်လို့ မျှော်လင့်မိပါတယ်။ မေးချင်းတာရှိရင် ရုံးချိန်ပြင်ပ message box ကနေ မေးလို့ရပါတယ်။ IDE မသုံးတဲ့သူတွေကတော့ နည်းနည်း ကြည်ရခက်ပါလိမ့်မယ်။ History တွေကို git log ဆိုတဲ့ command သုံးပြီး ရှာကြည့်နိုင်ပါတယ်။

မရဘူး command နဲ့ လှအောင် လုပ်လို့မရဘူးလာဆိုရင်တော့ ရပါတယ်။

git config --global alias.hist "log --pretty=format:'%h %ad | %s%d [%an]' --graph --date=short"
git config --global alias.lol "log --graph --decorate --pretty=oneline --abbrev-commit --all"
git config --global alias.mylog "log --pretty=format:'%h %s [%an]' --graph"

git config --list. run ပြီး မှန်မမှန် စစ်ကြည့်နိုင်ပါတယ်။ မှန်ရင် အောက်က result မြင်ရပါလိမ့်မယ်။

alias.hist=log --pretty=format:"%h %ad | %s%d [%an]" --graph --date=short
alias.lol=log --graph --decorate --pretty=oneline --abbrev-commit --all
alias.mylog=log --pretty=format:'%h %s [%an]' --graph

ပြီးတာနဲ့ git lol ဆိုပြီး ရိုက်ကြည့်ပါ။ sample ပုံပါ။

Happy Coding. Cheer-pick လုပ်ပုံကို နောက်အခုအပတ်ထဲ ရေးပေးပါမယ်။ Stay tune :)

--

--