Skip to content
GitHub

Commits များဆီသို့ ပြန်သွားကြည့်ခြင်း

Working Directory နဲ့ Staging Area အကြောင်း အသေးစိတ် ပြန်ဖတ်ချင်တယ်ဆိုရင် ဒီမှာ ဖတ်ကြည့်နိုင်ပါတယ် ခင်ဗျာ။

git reset <commit> ဆိုတာ ဘာလဲ? (Branch Pointer ကို ရွှေ့ခြင်း)

Section titled “git reset <commit> ဆိုတာ ဘာလဲ? (Branch Pointer ကို ရွှေ့ခြင်း)”
  • git reset ဆိုတာ ကိုယ် လက်ရှိ ရောက်နေတဲ့ Branch ရဲ့ ထိပ် (HEAD ညွှန်ပြနေတဲ့နေရာ) ကို တခြား Commit တစ်ခုဆီ ပြန်ရွှေ့လိုက်တာ ဖြစ်ပါတယ်။ ဒါက လက်ရှိ Branch ရဲ့ နောက်ဆုံး Commits တွေကို ကိုယ့်စက်ထဲမှာ “ဖယ်ရှားလိုက်သလိုမျိုး” ဖြစ်သွားစေနိုင်ပါတယ်။
  • Target Commit ကို ရွေးချယ်ခြင်း: Commit Hash ကို တိုက်ရိုက် သတ်မှတ်နိုင်သလို၊ HEAD~N ကိုလည်း သုံးနိုင်ပါတယ်။ (ဥပမာ - HEAD~1 ဆိုရင် “HEAD ရဲ့ အရင် ၁ ခုမြောက် Commit”၊ HEAD~2 ဆိုရင် “HEAD မတိုင်ခင် ၂ ခုမြောက် Commit” လို့ ဆိုလိုပါတယ်)။

ဥပမာ (Analogy)

ကိုယ့် Branch ကို ရထားတစ်စင်းလို့ မြင်ယောင်ကြည့်ပါ။ git reset က ရထားခေါင်း (HEAD) ကို အရင် ဘူတာရုံတစ်ခုဆီ နောက်ပြန် ဆုတ်သွားတာနဲ့ တူပါတယ်။ အဲ့ဒီလို ဆုတ်သွားတဲ့အခါ ကိုယ် ကျော်ဖြတ်ခဲ့တဲ့ ဘူတာရုံတွေက “ကုန်ပစ္စည်းတွေ” (ပြောင်းလဲမှုတွေ) ဘာဆက်ဖြစ်မလဲ ဆိုတာကတော့ ကိုယ်သုံးလိုက်တဲ့ Reset Mode (--soft, --mixed, သို့မဟုတ် --hard) အပေါ်မှာ မူတည်ပါတယ် ခင်ဗျာ။

Reset လုပ်တဲ့ ပုံစံ (၃) မျိုး (HEAD, Staging, Working Directory သက်ရောက်မှု)

Section titled “Reset လုပ်တဲ့ ပုံစံ (၃) မျိုး (HEAD, Staging, Working Directory သက်ရောက်မှု)”

git reset ရဲ့ Default Mode က --mixed ဖြစ်ပါတယ်။

ModeHEAD ကို ရွှေ့သလား?Staging Area ကို ရှင်းသလား?Working Directory ပြောင်းလဲသလား?
--softရွှေ့ပါတယ်မရှင်းပါဘူးမပြောင်းလဲပါဘူး
--mixedရွှေ့ပါတယ်ရှင်းပါတယ်မပြောင်းလဲပါဘူး
--hardရွှေ့ပါတယ်ရှင်းပါတယ်ပြောင်းလဲပါတယ် (အန္တရာယ်ရှိ)

1. git reset --soft <commit> (သက်ရောက်မှု အနည်းဆုံး)

Section titled “1. git reset --soft <commit> (သက်ရောက်မှု အနည်းဆုံး)”
  • ဘာလုပ်သလဲ?: HEAD ကို <commit> ဆီ ရွှေ့လိုက်ရုံပါပဲ။
  • Staging Area: ဘာမှ မပြောင်းလဲပါဘူး။ Reset လုပ်လိုက်တဲ့ Commits တွေက ပြောင်းလဲမှု အားလုံးဟာ Staged အနေအထားမှာ ဆက်ရှိနေပြီး၊ ချက်ချင်း ပြန် Commit လုပ်ဖို့ အသင့်ဖြစ်နေပါတယ်။
  • Working Directory: ဘာမှ မပြောင်းလဲပါဘူး။ ဖိုင်တွေမှာ ပြင်ထားတာတွေ အကုန် ရှိနေပါသေးတယ်။
  • ဘာကြောင့် သုံးသလဲ?: “နောက်ဆုံး Commits နည်းနည်းကို ပြန်ပြင်ပြီး တစ်ပေါင်းတည်း ပြန်လုပ်ချင်တယ်၊ ဒါပေမဲ့ ပြင်ထားတာတွေကိုတော့ လုံးဝ မပျက်စီးစေချင်ဘူး” ဆိုရင် သုံးပါတယ်။ Interactive Rebase မသုံးဘဲ Commits တွေကို ပေါင်းဖို့ အသုံးဝင်ပါတယ်။
  • ဥပမာ: C1, C2, C3 ဆိုပြီး Commit (၃) ခု ရှိတယ် ဆိုပါစို့။ git reset --soft HEAD~3 လို့ လုပ်လိုက်ရင် C1, C2, C3 ရဲ့ ပြောင်းလဲမှုတွေ အားလုံးက Staging Area ထဲမှာ စုနေမှာ ဖြစ်ပြီး၊ Message အသစ်နဲ့ တစ်ခါတည်း ပြန်ပြီး git commit လုပ်နိုင်ပါတယ်။
  • ဘာလုပ်သလဲ?: HEAD ကို <commit> ဆီ ရွှေ့ပါတယ်။ ပြီးတော့ Staging Area ကိုလည်း ရောက်သွားတဲ့ Commit နဲ့ ကိုက်ညီအောင် ရှင်းလင်းပေးလိုက်ပါတယ်။
  • Staging Area: ရှင်းသွားပါတယ်။ ပြောင်းလဲမှုတွေက Unstaged အဖြစ် ရောက်သွားပါတယ်။
  • Working Directory: ဘာမှ မပြောင်းလဲပါဘူး။ ပြင်ထားတာတွေ အကုန် ရှိနေသေးပေမဲ့၊ အခုတော့ သူတို့က Commit မလုပ်ရသေးတဲ့ Unstaged Changes တွေ ဖြစ်သွားပါပြီ။
  • ဘာကြောင့် သုံးသလဲ?: “မရည်ရွယ်ဘဲ Commit လုပ်မိသွားတယ်၊ ဒါမှမဟုတ် Commits တွေကို ပြန်ခွဲပြီး ဘယ်ဟာကို အရင် Stage လုပ်ရမလဲ ပြန်စဉ်းစားချင်တယ်” ဆိုရင် သုံးပါတယ်။
  • ဥပမာ: git reset HEAD~1 လို့ လုပ်လိုက်ရင် နောက်ဆုံး Commit ကို ပယ်ဖျက်လိုက်တာနဲ့ တူပါတယ်။ အဲ့ဒီ Commit ရဲ့ ပြောင်းလဲမှုတွေက Unstaged အဖြစ် ကျန်နေခဲ့မှာ ဖြစ်လို့၊ ကိုယ်လိုချင်တဲ့ အပိုင်းကိုပဲ git add ပြန်လုပ်ပြီး Commit အသစ် ပြန်လုပ်နိုင်ပါတယ်။

3. git reset --hard <commit> (သက်ရောက်မှု အများဆုံး - အန္တရာယ်ရှိ)

Section titled “3. git reset --hard <commit> (သက်ရောက်မှု အများဆုံး - အန္တရာယ်ရှိ)”
  • ဘာလုပ်သလဲ?: HEAD ကို <commit> ဆီ ရွှေ့ပါတယ်။ Staging Area ကို ရှင်းပါတယ်။ အဆိုးဆုံးက သင့် Working Directory ကိုပါ ရောက်သွားတဲ့ Commit နဲ့ ကိုက်ညီအောင် လုံးဝ ပြောင်းလဲပစ်လိုက်ပါတယ်။
  • Staging Area: ရှင်းသွားပါတယ်။
  • Working Directory: Commit မလုပ်ရသေးတဲ့ ပြောင်းလဲမှုတွေရော၊ Commit လုပ်ခဲ့တဲ့ ပြောင်းလဲမှုတွေပါ အကုန်လုံး ပျက်သွားပါမယ်
  • ဘာကြောင့် သုံးသလဲ?: “နောက်ဆုံး Commits တွေရော၊ အခု ပြင်လက်စ အလုပ်တွေ အားလုံးကိုပါ အပြီးတိုင် ဖျက်ပစ်ပြီး၊ ကိုယ် ရွှေ့လိုက်တဲ့ Commit ရဲ့ အခြေအနေအတိုင်း အတိအကျ ပြန်ဖြစ်ချင်တယ်” ဆိုရင် သုံးပါတယ်။
  • ဥပမာ: git reset --hard HEAD~1 လို့ လုပ်လိုက်ရင် နောက်ဆုံး Commit ရော၊ အဲ့ဒီ Commit နောက်ပိုင်း လုပ်ထားသမျှ အပြောင်းအလဲ အကုန်လုံးပါ လုံးဝ ပျောက်သွားပါမယ်။ ပြန်ယူလို့ မရတော့ပါဘူး။