git reset

Git reset

  • 作用:将工作从暂存区退回到工作区
  • 有下面几种参数

    1. git reset HEAD filename

      将filename从暂存区退回到工作区
      先进行提交到暂存区:

      [lkc@lkcdeMacBook-Pro:] ~/Desktop/Code/gitSample $ git add a.txt
      [lkc@lkcdeMacBook-Pro:] ~/Desktop/Code/gitSample $ git status
      On branch dev
      Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
      
      modified:   a.txt

      回退:

      [lkc@lkcdeMacBook-Pro:] ~/Desktop/Code/gitSample $ git reset head
      Unstaged changes after reset:
      M a.txt
      [lkc@lkcdeMacBook-Pro:] ~/Desktop/Code/gitSample $ git status
      On branch dev
      Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
      
      modified:   a.txt
      
      no changes added to commit (use "git add" and/or "git commit -a")
    2. git reset head~n

      mixed方式,默认无参;
      回退版本,^和n代表版本数,这里直接回退到未暂存阶段
      先用

      git log -n

      查看一下最近n次提交的日志:

      lkcdeMacBook-Pro:gitSample lkc$ git log -3
      commit 037a1bdaa48667e2fa3e62678b3d3f62dc2b6b7b
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:11:10 2017 +0800
      
        e2
      
      commit f9c2fdc70cfa68d7c42466b5f8f3a5cab1bc651c
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:10:26 2017 +0800
      
        a
      
      commit 948836a561b210d14424a1efe631cda549b566f3
      Author: lkc <lkc@lkcdeMacBook-Pro.local>
      Date:   Mon Jun 5 17:10:15 2017 +0800
      
        commit information

      回退之后查看:

      lkcdeMacBook-Pro:gitSample lkc$ git reset head~2
      lkcdeMacBook-Pro:gitSample lkc$ git log -3
      commit 948836a561b210d14424a1efe631cda549b566f3
      Author: lkc <lkc@lkcdeMacBook-Pro.local>
      Date:   Mon Jun 5 17:10:15 2017 +0800
      
        commit information
    3. git reset –soft head~1

      将版本库软回退到前一个版本,就是将将本地版本库的头指针重置到上一个版本,且将这次回退之后的所有变更移到缓存区.

      lkcdeMacBook-Pro:gitSample lkc$ git log -3
      commit c70659c624382a8b87de1c19063989fc38c44f4c
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:22:49 2017 +0800
      
        e2,f2
      
      commit 43e7ac4eddf470c30b29c9b37c53deb65cf78222
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:22:22 2017 +0800
      
        c2,d2
      
      commit 62fe9fd3c5fe0de520000bae8b435502663373c2
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:22:08 2017 +0800
      
      a2,b2

      软回退:

      lkcdeMacBook-Pro:gitSample lkc$ git reset --soft head~1
      lkcdeMacBook-Pro:gitSample lkc$ git log -3
      commit 43e7ac4eddf470c30b29c9b37c53deb65cf78222
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:22:22 2017 +0800
      
        c2,d2
      
      commit 62fe9fd3c5fe0de520000bae8b435502663373c2
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:22:08 2017 +0800
      
        a2,b2
      
      commit 948836a561b210d14424a1efe631cda549b566f3
      Author: lkc <lkc@lkcdeMacBook-Pro.local>
      Date:   Mon Jun 5 17:10:15 2017 +0800
      
        commit information
      lkcdeMacBook-Pro:gitSample lkc$ git status
      On branch master
      Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
      
      new file:   e.txt
      new file:   f.txt
    4. git reset –hard head~1

      回退版本,不仅将本地版本库的头指针指向上一个版本还会重置暂存区,并将本地的工作区代码也回退到该版本.
      原来e.txt的内容:

      this is e2.txt

      修改后:

      this is e3.txt

      提交:

      lkcdeMacBook-Pro:gitSample lkc$ git add e.txt
      lkcdeMacBook-Pro:gitSample lkc$ git commit -m "e3"
      [master 6b057ba] e3
      1 file changed, 1 insertion(+), 1 deletion(-)
      lkcdeMacBook-Pro:gitSample lkc$ git log -2
      commit 6b057ba047f012b13b822016fb3b2f8b6946ae4b
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:32:25 2017 +0800
      
        e3
      
      commit 99c0d29602438a20bf4007e2494b52044a58187b
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:25:43 2017 +0800
      
        e3,f3    

      回退并查看日志:

      lkcdeMacBook-Pro:gitSample lkc$ git reset --hard head~1
      HEAD is now at 99c0d29 e3,f3
      lkcdeMacBook-Pro:gitSample lkc$ git log -2
      commit 99c0d29602438a20bf4007e2494b52044a58187b
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:25:43 2017 +0800
      
        e3,f3
      
      commit 43e7ac4eddf470c30b29c9b37c53deb65cf78222
      Author: xxx <xxx.com>
      Date:   Tue Jun 6 10:22:22 2017 +0800
      
        c2,d2    

      查看e.txt:

      this is e2.txt

      git reset帮助

### 回退提交的三种方式 `git reset` 是 Git 中用于回退提交的重要命令,可以根据不同需求选择不同的参数进行操作。以下是几种常见的使用方式: #### 1. 使用 `git reset --soft` 该命令会将 HEAD 指针移动到指定的提交,但保留工作区和暂存区的内容不变。这意味着你可以重新提交这些更改。 例如,撤销最近一次提交并保留更改: ```bash git reset --soft HEAD^ ``` 此操作适用于发现最新提交中存在错误但仍希望保留更改以便重新提交的情况 [^2]。 #### 2. 使用 `git reset --mixed` 或 `git reset` 默认情况下,`git reset` 等同于 `git reset --mixed`,它会将 HEAD 指针移动到指定提交,并清空暂存区,但不会影响工作区的内容。 例如,撤销最近一次提交并清空暂存区: ```bash git reset HEAD^ ``` 此操作适用于需要重新添加文件到暂存区后再提交的情况 [^1]。 #### 3. 使用 `git reset --hard` 该命令会将 HEAD 指针移动到指定提交,并且会丢弃工作区和暂存区的所有更改。这是最彻底的回退方式,但需要注意,这会导致未提交的更改丢失。 例如,强制回退到上一次提交并丢弃所有更改: ```bash git reset --hard HEAD^ ``` 此操作适用于需要完全恢复到某个历史状态的情况,但需谨慎使用,因为会永久删除未提交的更改 [^5]。 ### 远程仓库的强制推送 当本地已经通过 `git reset` 回退了提交,而远程仓库仍然保留着旧的历史记录时,需要通过强制推送来更新远程仓库。 例如,强制推送本地更改到远程分支: ```bash git push origin <branch-name> -f ``` 此操作适用于需要同步远程仓库与本地更改的情况,但同样需要谨慎使用,因为它会影响其他开发者的工作 [^5]。 ### 示例代码 以下是一个完整的示例,展示如何使用 `git reset` 回退提交并强制推送到远程仓库: ```bash # 查看提交历史 git log # 回退到上一次提交并丢弃所有更改 git reset --hard HEAD^ # 强制推送更改到远程仓库 git push origin U1101_6113_GMS -f ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值