Git reset 使用

日常的工作當(dāng)中,由于需要和別人協(xié)同工作,代碼方面當(dāng)然就直接使用Git的方式來管理了。在日常使用當(dāng)中有很多命令比較常用

  • git commit
  • git push
  • git stash
  • git rebase -i HEAD~想要合并的Commit數(shù)量
  • git reset

git rebase 我在這一篇文章已經(jīng)做了一點(diǎn)講解,應(yīng)該使用起來都比較方便。值得一提的是,可以使用git rebase -abort來撤銷一次rebase。

今天來說一下git reset。它的一句話概括

git-reset - Reset current HEAD to the specified state

意思就是可以讓HEAD這個指針指向其他的地方。例如我們有一次commit不是不是很滿意,需要回到上一次的Commit里面。那么這個時候就需要通過reset,把HEAD指針指向上一次的commit的點(diǎn)。

它有三種模式,soft,mixed,hard,具體的使用方法下面這張圖,展示的很全面了。

image

這三個模式理解了,對于使用這個命令很有幫助。在理解這三個模式之前,需要略微知道一點(diǎn)Git的基本流程。正如上圖,Git會有三個區(qū)域:

  • Working Tree 當(dāng)前的工作區(qū)域
  • Index/Stage 暫存區(qū)域,和git stash命令暫存的地方不一樣。使用git add xx,就可以將xx添加近Stage里面
  • Repository 提交的歷史,即使用git commit提交后的結(jié)果
image

結(jié)合這兩張圖,基本就非常明確的知道這三個參數(shù)的作用范圍了。假設(shè)我們對于一個txt文件,每次順序添加一個數(shù)字。有4次提交,1 -> 2 -> 3 ->4,則txt中就會有4個數(shù)字1234,使用命令git reset [param] HEAD~2

  • soft:將HEAD reset到目標(biāo)2,由于沒有修改working tree和stage,所以這時它倆的文件都是txt[1234],但是如果和HEAD進(jìn)行diff就會發(fā)現(xiàn),此時HEAD指向是commit2-txt[12]
  • mixed:將HEAD reset到目標(biāo)2,沒有修改working tree,所以working tree里面的文件是txt[1234],此時stage是空的,HEAD指向的仍然是commit2-txt[12]
  • hard:將HEAD reset到目標(biāo)2,清除三個區(qū)域,working tree = stage = history = txt[12]

Git在默認(rèn)執(zhí)行reset命令的時候會選擇mixed,如果不小心使用hard參數(shù),丟失了當(dāng)前的commit也不要慌。在Git中所有的歷史提交都會有記錄下來,輸入git reflog,找到所有的歷史紀(jì)錄。然后通過HEAD@{N}來恢復(fù)到某一次提交。

git reset --hard HEAD@{N}

ref :

  1. git reset soft,hard,mixed之區(qū)別深解
  2. Reset - mixed, hard and soft
  3. SOF
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容