Git——reset的三种模式

1. reset 的三种模式 

  • --hard:stage区和工作目录里的内容会被完全重置为和指定 HEAD 位置相同的内容。

  • --soft:保留工作目录和暂存区中未提交的内容,并把重置 HEAD 所带来的新的差异(回滚掉的commit较回滚后最新commit的修改)放进暂存区。

  • --mixed(默认):工作区、暂存区未提交的内容以及由 reset 所导致的新差异,都会被放进工作区。

 

 

2. reset --hard

重置stage区和工作目录(慎用)。

在 reset 后面加 --hard 参数时,stage区和工作目录里的内容会被完全重置为和指定 HEAD 位置相同的内容。也就是没有commit的修改会被全部擦掉。执行后工作区、暂存区、版本库保持一致(指定HEAD版本)

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   aa.txt

no changes added to commit (use "git add" and/or "git commit -a")

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git log
commit 79ed69f7fdeb3474c36fa111ee82ef067575ad83 (HEAD -> master)
Author: Zhangtao153 <13289265979@163.com>
Date:   Wed Nov 25 21:19:27 2020 +0800

    bb

commit d40163567818b2ac0b28743058ff9c68a7798390
Author: Zhangtao153 <13289265979@163.com>
Date:   Wed Nov 25 21:19:03 2020 +0800

    aa

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git reset --hard HEAD^
HEAD is now at d401635 aa

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git log
commit d40163567818b2ac0b28743058ff9c68a7798390 (HEAD -> master)
Author: Zhangtao153 <13289265979@163.com>
Date:   Wed Nov 25 21:19:03 2020 +0800

    aa

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git status
On branch master
nothing to commit, working tree clean

3. reset --soft

保留工作目录和暂存区中未提交的内容,并把重置 HEAD 所带来的新的差异(回滚掉的commit较回滚后最新commit的修改)放进暂存区。

可以使用 Soft Reset 合并「当前节点」与「reset目标节点」之间不具太大意义的 commit 记录,让 commit 演进线图较为清晰点。

【示例】工作区添加新文件后reset 

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git log
commit 82ad83fcfcfb366ab7a895053f9b8936aaabf6cf (HEAD -> master)
Author: Zhangtao153 <13289265979@163.com>
Date:   Wed Nov 25 21:39:37 2020 +0800

    bb

commit d40163567818b2ac0b28743058ff9c68a7798390
Author: Zhangtao153 <13289265979@163.com>
Date:   Wed Nov 25 21:19:03 2020 +0800

    aa

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git status
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        bb.txt

nothing added to commit but untracked files present (use "git add" to track)

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git reset --soft HEAD^

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git log
commit d40163567818b2ac0b28743058ff9c68a7798390 (HEAD -> master)
Author: Zhangtao153 <13289265979@163.com>
Date:   Wed Nov 25 21:19:03 2020 +0800

    aa

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   aa.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        bb.txt

4. reset 不加参数(mixed)

工作区、暂存区未提交的内容以及由 reset 所导致的新差异,都会被放进工作区。简而言之,就是「把所有差异都混合(mixed)放在工作目录中」。

【例】工作区修改后添加到暂存区,在工作区添加新文件后reset

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   aa.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        bb.txt


Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git reset HEAD^
Unstaged changes after reset:
M       aa.txt

Administrator@WIN-DTNF3GRDH5R MINGW64 /g/tmp/test (master)
$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   aa.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        bb.txt

no changes added to commit (use "git add" and/or "git commit -a")

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Git Reset有三种模式,分别是soft、mixed和hard。\[2\]这三种模式的具体使用方法如下: 1. soft模式:使用`git reset --soft`命令可以将HEAD指针指向上一次的commit,同时保留之前的修改内容在暂存区中。这样可以撤销上一次的commit,但是保留修改内容以便重新提交。 2. mixed模式(默认模式):使用`git reset --mixed`命令可以将HEAD指针指向上一次的commit,并且将之前的修改内容放回工作目录中。这样可以撤销上一次的commit,并且取消之前的修改内容。 3. hard模式:使用`git reset --hard`命令可以将HEAD指针指向上一次的commit,并且将之前的修改内容完全删除。这样可以彻底撤销上一次的commit,并且丢弃之前的修改内容。请注意,使用hard模式会永久删除修改内容,请谨慎使用。 所以,git reset命令可以根据不同的模式来回退到之前的某个版本或撤销之前的commit。 #### 引用[.reference_title] - *1* [Git Reset 三种模式](https://blog.csdn.net/QGhurt/article/details/122651361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [GitReset的三种模式](https://blog.csdn.net/weixin_42028608/article/details/118595288)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值