နိဒါန်း#
Git သုံးတဲ့အခါမှာ ကိုယ်က git commit လုပ်လိုက်ပြီးမှ ဖိုင်တချို့ ပါဖို့ကျန်ခဲ့တာပဲဖြစ်ဖြစ်၊ commit message မှားသွားတာပဲဖြစ်ဖြစ် ကြုံဖူးကြမှာပါ။ အဲ့လိုအချိန်မှာ commit လုပ်ပြီးသား file တွေကို ပြန်ပြင်ချင်ရင် git reset --soft ကို သုံးပြီး အလွယ်တကူ ပြန်ပြင်လို့ရပါတယ်။
ဒီ post မှာ git reset --soft HEAD^ နဲ့ git reset --soft HEAD~n ကို သုံးပြီး နောက်ဆုံး commit နဲ့ အရင်လုပ်ခဲ့တဲ့ commit တွေကို ဘယ်လို ပြန်ပြင်မလဲ ဆိုတာကို sharing လုပ်ချင်ပါတယ်။
နောက်ဆုံး Commit ကို ပြန်ပြင်မယ်ဆိုရင်?#
ကိုယ့်ရဲ့ နောက်ဆုံးလုပ်ခဲ့တဲ့ commit ကို ဖျက်ပြီး file တွေကို staging area ထဲ ပြန်ထားချင်တယ်ဆိုရင် အောက်က command ကို သုံးနိုင်ပါတယ်။
git reset --soft HEAD^ဒီ command က HEAD (လက်ရှိ ရောက်နေတဲ့ နေရာ) ရဲ့ အရှေ့က တခုကို ပြန်ဆုတ်လိုက်တာပါ။ --soft ကို သုံးထားတဲ့အတွက် file တွေက မပျက်သွားပဲ staging area (index) မှာပဲ ကျန်နေခဲ့ပါမယ်။ အဲ့ဒီအခါမှာ ကိုယ်လိုချင်တဲ့ file တွေကို ထပ်ထည့်တာ၊ ဖြုတ်တာတွေ လုပ်ပြီးရင် အသစ်ပြန်ပြီး commit လုပ်လို့ရပါပြီ။
အရင်က Commit တွေကို ပြန်ပြင်မယ်ဆိုရင်?#
တကယ်လို့ နောက်ဆုံးတခုတည်း မဟုတ်ဘဲ နောက်ဆုံး နှစ်ခု၊ သို့မဟုတ် သုံးခုလောက်ကို ပြန်ပြင်ချင်တယ်ဆိုရင် HEAD~n ကို သုံးနိုင်ပါတယ်။
ဥပမာ နောက်ဆုံးလုပ်ခဲ့တဲ့ commit သုံးခုကို ပြန်ဖြုတ်ပြီး အစကနေ ပြန်ပေါင်းပြီး commit အသစ်တခုအနေနဲ့ လုပ်ချင်တယ်ဆိုရင်:
git reset --soft HEAD~3ဒီ command က နောက်ဆုံး commit သုံးခုကို ဖျက်ပေးပြီး file တွေကို staging area ထဲ ပြန်ထည့်ပေးပါလိမ့်မယ်။ အဲ့ဒီနောက်မှာ အားလုံးကိုစုပြီး commit အသစ်တခုတည်း အနေနဲ့ ပြန်လုပ်နိုင်ပါတယ်။
အခြား အသုံးဝင်တဲ့ Tips တွေ#
1. git reset --mixed နဲ့ ဘာကွာလဲ?#
အကယ်၍ --soft အစား ဘာမှမထည့်ဘဲ git reset HEAD^ ဒါမှမဟုတ် git reset --mixed HEAD^ လို့ သုံးလိုက်ရင် file တွေက staging area (index) ကနေပါ ထွက်သွားပြီး modified state (unstaged) မှာ ရောက်သွားပါမယ်။ ပြန်ပြီး git add လုပ်ဖို့ လိုအပ်ပါတယ်။
2. git reset --hard ကို သတိထားပါ#
တကယ်လို့ git reset --hard HEAD^ လို့ သုံးလိုက်မယ်ဆိုရင်တော့ commit ကို ဖျက်ရုံတင်မကဘဲ file တွေထဲမှာ ပြင်ထားတဲ့ code တွေပါ အကုန်ပျက်သွားမှာ ဖြစ်ပါတယ်။ ဒါကြောင့် code တွေကို မဖျက်ဘဲ commit ပဲ ပြန်ပြင်ချင်တဲ့အခါ --soft ကို သုံးဖို့ သေချာဂရုစိုက်ပါ။
3. Remote Server ပေါ်ကို ပြန်တင်မယ်ဆိုရင်?#
ကိုယ့်ရဲ့ origin/remote ကို git push လုပ်ပြီးသား commit တွေကို reset လုပ်ပြီး ပြန်ပြင်ထားတယ်ဆိုရင် ရိုးရိုး git push လို့ မရတော့ပါဘူး။ History တွေ ပြောင်းသွားတဲ့အတွက် force push လုပ်ပေးဖို့ လိုအပ်ပါတယ်။
git push --force-with-lease origin main--force ထက် --force-with-lease ကို သုံးတာက တခြားသူတွေရဲ့ code တွေကို မတော်တဆ ဖျက်မိတာမျိုး မဖြစ်အောင် ကာကွယ်ပေးနိုင်ပါတယ်။
နိဂုံး#
git reset --soft ဟာ file တွေ မပျက်စေဘဲ commit history ကို ရှင်းလင်းအောင် ပြန်စီစဉ်တဲ့နေရာ၊ မတော်တဆ မှားသွားတဲ့ commit တွေကို ပြန်ပြင်တဲ့နေရာမှာ အလွန်အသုံးဝင်တဲ့ command တခုပါ။ ဒီ tip လေးတွေက နေ့စဉ် code ရေးတဲ့နေရာမှာ အထောက်အကူဖြစ်မယ်လို့ မျှော်လင့်ပါတယ်။
