理解git reset方法和各种参数的用法

1. git reset 语法

命令格式:git reset [--soft | --mixed | --hard] [<commit>]

1.1 使用参数--hard,如git reset --hard <commit ID>

①替换引用的指向。引用指向新的提交ID。

②替换暂存区。替换后,暂存区的内容和引用指向的目录树一致。

③替换工作区。替换后,工作区的内容变得和暂存区一致,也和HEAD所指向的目录树内容相同。

1.2 使用参数--soft,如 git reset --soft <commit ID>

即只更改引用的指向,不改变暂存区和工作区。

只改变commit(指针指向),stage index 和 working directory 不变

1.3 使用参数--mixed或者不使用参数(默认为--mixed),如 git reset <commit>

更改引用的指向及重置暂存区,但是不改变工作区。

只改变commit(指针指向) 和 add (stage index),working directory不变

eg.

git status # 查看工作区是否干净

subl readme.md # 修改md文件

git add readme.md # 提交到缓存区 stage index

git commit -m '201907071410' # 提交到版本库

git reset --mix head # 将 stage index 和指针退回到上一次提交

git status # 检查工作区状态

git checkout --README.md # 将缓存区文件拉回到工作区

已经push到远程仓库的代码

通过 git reset <commit_id>

直接删除指定的commit id后面所有的提交,指针指向commit id

git push origin HEAD --force

强制提交代码,因为本地版本早于远程仓库代码

2. git reset 原理

--hard:重置位置的同时,直接将 working Tree工作目录、 index 暂存区及
repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和
工作区。

--soft:重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。

--mixed(默认):重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 有时候,我们用Git的时候有可能commit提交代码后,发现这一次commit的内容是有错误的,那么有两种处理方法...
    carway阅读 460,091评论 31 339
  • 安装Git Git的下载地址:Git官网下载地址 Git本地仓库和命令 配置用户 下载完Git后,右键会有一个Gi...
    TokyoZ阅读 9,977评论 1 7
  • 目录 Git 笔记系列(一)—— Git简介 Git 笔记系列(二)—— Git工作流程 Git 笔记系列(三)—...
    吃蘑菇De大灰狼阅读 5,099评论 0 3
  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 7,061评论 0 1
  • 1. GIT命令 git init在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个re...
    江边一蓑烟阅读 4,253评论 0 0

友情链接更多精彩内容