Git reset命令的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git reset命令的使用相关的知识,希望对你有一定的参考价值。

参考技术A Git reset 命令有三个主要选项:git reset --soft; git reset --mixed; git reset --hard;

git reset --soft

将HEAD引用指向给定提交。索引(暂存区)和工作目录的内容是不变的,在三个命令中对现有版本库状态改动最小。

git reset --mixed(git reset默认的模式)

HEAD引用指向给定提交,并且索引(暂存区)内容也跟着改变,工作目录内容不变。这个命令会将索引(暂存区)变成你刚刚暂存该提交全部变化时的状态,会显示工作目录中有什么修改。

git reset --hard

HEAD引用指向给定提交,索引(暂存区)内容和工作目录内容都会变给定提交时的状态。也就是在给定提交后所修改的内容都会丢失(新文件会被删除,不在工作目录中的文件恢复,未清除回收站的前提)。

用表格看起来会更清楚些:

操作一下看一下实际效果:

首先在一个版本库中修改追踪文件,然后提交,description叫做 add button

使用git log 查看历史提交

copy记录 add button 的前一次提交 add label 的哈希ID “7c5a658fbceb904ad877c4254d183e68aed1ddd0”,作为我们reset的给定提交。

git stauts 查看一下当前版本库中文件状态

显示nothing to commit ,在add button 提交后未对版本库中文件做修改

执行 git reset --soft 7c5a658fbceb904ad877c4254d183e68aed1ddd0 命令,然后使用git status 查看文件状态。

然后再使用git log 查看历史提交记录。

会发现add button 已经没有了,版本库已经回滚到add label提交的状态了,但是在我们add button 提交修改的文件 里面修改的内容没有丢失,只是回到了未提交的状态。

将文件再次提交,同样取名add button ,继续 git reset --mixed 操作。

同样是回滚到了add button 之前的add label 提交。被修改的文件内容也没有丢失,但是修改的文件为红色了(未执行add 操作)。

将文件再次提交,同样取名add button ,继续进行 git reset --hard 操作。

执行完git reset --hard 命令后,使用git status 查看文件状态,回滚到add label 提交,add button被修改的文件内容已经没有了,丢失了。版本库中的文件已经完全回到刚提交完add label时的状态。

git reset 根据需要使用不同的命令,使用 --hard时一定考虑回滚后文件的丢失!

每天一命令 git reset

在使用git的时候不免遇到commit的时候commit了错误的代码的时候,这时候就需要用到git的常用命令之一  reset了.

reset顾名思义为重置.重置的是HEAD指针,可以使HEAD指针移动到任意commit上.

使用git log [--oneline] 命令查看之前所有的commit id.然后使用git reset命令使HEAD指针指向其中的一个id.

git reset 有三个可选参数 --hard  --mixed  --soft  

其中--hard参数表示不但重置HEAD指针而且还会重置当前的暂存区和工作区,这个参数比较危险,会使当前工作区的内容丢失,并且是不可找回的丢失.

--mixed参数为默认参数.该参数会重置HEAD指针并且重置暂存区.但是对工作区却没有什么影响.

--soft参数表示只充值HEAD指针.不改变暂存区和工作区.

 

若重置了之后又后悔了,那么可以使用git reflog 命令查看最近的HEAD指针的变化.然后根据这里面的commit id 来确定git reset 的id.这样就不怕弄错了

 

git reset 后面不但可以接commit id 而且可以直接跟文件名称.

若reset后面跟的是文件名称那么将不会重置HEAD指针,而是重置这个文件.重置效果和commit id 一样.

以上是关于Git reset命令的使用的主要内容,如果未能解决你的问题,请参考以下文章

git reset --hard和git revert命令

Git reset命令的使用

Git 学习深入理解git reset 命令

git revert 与 git reset

git reset命令之撤销提交

Git 版本恢复命令reset