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ဖြစ်ပါတယ်။
| Mode | HEAD ကို ရွှေ့သလား? | 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လုပ်နိုင်ပါတယ်။
2. git reset --mixed <commit> (Default)
Section titled “2. git reset --mixed <commit> (Default)”- ဘာလုပ်သလဲ?:
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 နောက်ပိုင်း လုပ်ထားသမျှ အပြောင်းအလဲ အကုန်လုံးပါ လုံးဝ ပျောက်သွားပါမယ်။ ပြန်ယူလို့ မရတော့ပါဘူး။