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命令的使用的主要内容,如果未能解决你的问题,请参考以下文章