Skip to main content
Git Commit တွေကို ဘယ်လို ပြန်ပြင်မလဲ (git reset --soft)

Git Commit တွေကို ဘယ်လို ပြန်ပြင်မလဲ (git reset --soft)

·316 words·2 မိနစ်

Read this article in English

နိဒါန်း
#

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 ရေးတဲ့နေရာမှာ အထောက်အကူဖြစ်မယ်လို့ မျှော်လင့်ပါတယ်။

Author
Pyae Thu Aung
Software Engineering Manager @ Yoma Fleet | Ex Tech Lead @ OneKyat