Commits များဆီသို့ ပြန်သွားကြည့်ခြင်း
Working Directory နှင့် Staging Area တို့ အကြောင်း အသေးစိတ် မသိသေးဘူးဆိုရင် ဒီမှာ ဖတ်ကြည့်နိုင်ပါတယ်
git reset <commit>
ဆိုတာ ဘာလဲ။ သင့် Branch Pointer ကို ရွှေ့ခြင်း။
Section titled “git reset <commit> ဆိုတာ ဘာလဲ။ သင့် Branch Pointer ကို ရွှေ့ခြင်း။”-
git reset ဟာ သင်လက်ရှိရောက်နေတဲ့ branch ရဲ့ ထိပ် (HEAD ညွှန်ပြနေတဲ့နေရာ) ကို တခြား commit တစ်ခုဆီ ရွှေ့လိုက်တာပါ။ ဒါက လက်ရှိ branch ရဲ့ နောက်ဆုံးက commit တွေကို ကိုယ့်စက်ထဲမှာ “ဖယ်ရှားလိုက်” သလိုမျိုး ဖြစ်စေနိုင်ပါတယ်။
-
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” လုပ်လိုက်တဲ့ commit တွေရဲ့ ပြောင်းလဲမှုအားလုံးဟာ staged အနေအထားမှာ ရှိနေပြီး ပြန်ပြီး commit လုပ်ဖို့ အသင့်ဖြစ်နေပါတယ်။ (တစ်စုတစ်စည်းတည်း commit လုပ်နိုင်သလို၊ ခွဲပြီးလည်း လုပ်နိုင်ပါတယ်။)
- Working Directory: ဘာမှ မပြောင်းလဲပါဘူး။ သင့် files တွေမှာ အရင်လုပ်ထားတဲ့ အလုပ်တွေ အကုန်ရှိနေပါသေးတယ်။
- ဘာကြောင့်သုံးလဲ။ “ဟာ၊ နောက်ဆုံး commit အနည်းငယ်ကို ပြန်ပြင်ပြီး တခြားပုံစံနဲ့ လုပ်ချင်တယ်၊ ဒါပေမဲ့ လုပ်ထားတဲ့အလုပ်တွေကိုတော့ မပျက်စီးစေချင်ဘူး။” ဆိုရင် သုံးပါတယ်။ နောက်ဆုံး commit အနည်းငယ်ကို interactive rebase မသုံးဘဲ commit message အသစ်နဲ့ တစ်ခုတည်း ပေါင်းဖို့အတွက် အသုံးဝင်ပါတယ်။
- ဥပမာ။ သင် commit (၃) ခု (C1, C2, C3) လုပ်ထားတယ်ဆိုပါစို့။
git reset --soft HEAD~3
လို့ လုပ်လိုက်ရင် HEAD က C1 မတိုင်ခင် commit ကို ရောက်သွားပါမယ်။ C1, C2, C3 တို့ရဲ့ ပြောင်းလဲမှုအားလုံးဟာ သင့် Staging Area ထဲမှာ ရှိနေပြီး “New combined message” ဆိုပြီးgit commit
ပြန်လုပ်နိုင်ပါတယ်။
2. git reset --mixed <commit>
(Default)
Section titled “2. git reset --mixed <commit> (Default)”- ဘာလုပ်လဲ: HEAD ကို
<commit>
ဆီ ရွှေ့ပါတယ်။ ဒါ့အပြင် Staging Area ကိုလည်း ရောက်သွားတဲ့ commit နဲ့ ကိုက်ညီအောင် ပြန်ပြင်ပေးပါတယ်။ - Staging Area: “reset” လုပ်လိုက်တဲ့ commits တွေရဲ့ ပြောင်းလဲမှုတွေကို ရှင်းပစ်ပါတယ်။ ပြောင်းလဲမှုတွေက unstaged ဖြစ်သွားပါတယ်။
- Working Directory: ဘာမှ မပြောင်းလဲပါဘူး။ သင့် files တွေမှာ “reset” လုပ်လိုက်တဲ့ commit တွေရဲ့ အလုပ်တွေ အကုန်ရှိနေပါသေးတယ်။ ဒါပေမဲ့ ဒီပြောင်းလဲမှုတွေက အခု commit မလုပ်ရသေးတဲ့၊ unstaged ပြောင်းလဲမှုတွေ ဖြစ်သွားပါတယ်။
- ဘာကြောင့်သုံးလဲ။ “ဟာ၊ မရည်ရွယ်ဘဲ commit လုပ်မိသွားတယ်။ ဒါမှမဟုတ် နောက်ဆုံး commit တွေကို ပြန်ခွဲပြီး ဘယ်ဟာကို stage လုပ်ရမလဲဆိုတာ ပြန်စဉ်းစားချင်တယ်” ဆိုရင် သုံးပါတယ်။
- ဥပမာ။
git reset HEAD~1
လို့ လုပ်လိုက်ရင် သင့်ရဲ့ နောက်ဆုံး commit ကို “ပယ်ဖျက်” လိုက်သလို ဖြစ်သွားပါတယ်။ အဲဒီ commit ရဲ့ ပြောင်းလဲမှုတွေက သင့် Working Directory ထဲမှာ unstaged changes တွေအဖြစ် ရှိနေပါမယ်။ ဒါဆို သင် ပြောင်းလဲမှုတချို့ကို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 လုပ်ခဲ့တဲ့ ပြောင်းလဲမှုတွေရောအားလုံးဟာ ပျက်သွားပါမယ်။ ဒါက ဖျက်ပစ်တာနဲ့ အတူတူပါပဲ။
- ဘာကြောင့်သုံးလဲ: “ကျွန်တော်တို့ရဲ့ နောက်ဆုံး N commits တွေနဲ့ commit မလုပ်ရသေးတဲ့ အလုပ်တွေကို အပြီးတိုင် ဖျက်ပစ်ပြီး၊ ကျွန်တော့် project ကို
reset --hard
လုပ်လိုက်တဲ့<commit>
မှာ ရှိခဲ့တဲ့ အခြေအနေအတိုင်း အတိအကျ ဖြစ်စေချင်တယ်” ဆိုရင် သုံးပါတယ်။ - ဥပမာ။
git reset --hard HEAD~1
လို့ လုပ်လိုက်ရင် သင့်ရဲ့ နောက်ဆုံး commit က ပျောက်သွားပါမယ်။ အဲဒီ commit မှာ လုပ်ခဲ့တဲ့ ပြောင်းလဲမှုတွေ အားလုံးလည်း သင့် working files တွေကနေ ပျောက်သွားပါမယ်။ သင့် project ဟာ အဲဒီ နောက်ဆုံး commit မတိုင်ခင်က အခြေအနေအတိုင်း အတိအကျ ဖြစ်သွားပါမယ်။