git reset 進階

命令:

git reset [--hard | soft | mixed | merge | keep ]git

做用:

將當前分支重設到指定的<commit>(默認是HEAD,即最新提交)。而且根據[mode]參數能指定重置(reset)idex或是working directory。ide

mode詳解:

1.--softspa

  • 版本庫(repository):HEAD 指向指定<commit>3d

  • 暫存區(index):不重置到指定<commit>,此次<commit>以後的全部變動都撤銷到此blog

  • 工做區(working directory):無變化rem

  • egit

當前分支是master,<commit>C是最新提交,即HEAD指向<commit>C
image.pngast

執行:class

$ git reset --soft HEAD~1im

執行後:
image.png

①版本庫:HEAD指向<commit>B;②暫存區:<commit>C撤銷到暫存區;③工做區:無變化

執行:

$ git status

能夠看到<commit>C撤銷到了暫存區,處於"Changes to be committed"狀態。

2.--mixed(默認模式)

  • 版本庫:HEAD 指向指定<commit>

  • 暫存區(index):重置到指定<commit>

  • 工做區(working directory):此次<commit>以後的全部變動都撤銷到此

  • eg

當前分支是master,<commit>C是最新提交,即HEAD指向<commit>C
image.png

執行:

$ git reset --mixed HEAD~1

執行後:
image.png

①版本庫:HEAD指向<commit>B;②暫存區:重置到<commit>B;③工做區:<commit>C撤銷到工做區

執行:

$ git status

能夠看到<commit>C撤銷到了工做區,處於"unstage"狀態。

3.--hard

  • 版本庫:HEAD 指向指定<commit>

  • 暫存區(index):重置到指定<commit>

  • 工做區(working directory):重置到指定<commit>

  • 注意:工做區未add的修改和暫存區未commit的修改,所有丟棄。(若是想回到最新提交可用 git reflog 查看commit號 而後再利用本命令恢復)

  • eg

當前分支是master,<commit>C是最新提交,即HEAD指向<commit>C
image.png

執行:

$ git reset --hard HEAD~1

執行後:
image.png

①版本庫:HEAD指向<commit>B;②暫存區:重置到<commit>B;③工做區:重置到<commit>B

執行:

$ git status

能夠看到工做空間是乾淨的

4.--merge

  • 不經常使用

5.--keep

  • 不經常使用

相關文章
相關標籤/搜索