git篇之reset
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git篇之reset相关的知识,希望对你有一定的参考价值。
参考技术A git reset --hard HEAD ---->指针指向当前版本git reset --mixed HEAD^ HEAD指针回退,保留暂存区和工作区改动
git reset --soft HEAD^ 重置暂存区,HEAD指针回退,保留工作区改动
git reset --hard HEAD^ --->回滚到上个版本
git reset --hard HEAD^~2 --->回滚到前两个版本
git reset --hard xxx(commitid或commit前几位)--->回滚到指定版本号,如果是版本号前几位,git会自动寻找匹配的版本号
git reset --hard xxx(commitid或commitid前几位) filename--->回滚某个文件到指定版本号(需要进入该文件所在目录)
6、git reset --patch --->重置补丁
1、git reset --soft HEAD~2 --->撤销最新的2次提交
2、git add . --->添加文件到暂存区
3、git commit -m message --->添加提交说明
4、git push 推送提交到远程仓库
git reset 命令详解
参考技术A 当要回退到某一次提交的状态时,可以使用git reset命令。有三个常用参数:--soft,--mixed,--hard。按照Git文档的习惯,可以写作
git reset [--soft | --mixed | --hard] [<commit>]
其中,<commit>是指commit的hashcode。
也可以使用HEAD代替<commit>,命令为
git reset [--soft | --mixed | --hard] [HEAD]
其中,
或者,
如果在最近一次提交之后,没有任何文件修改,则使用HEAD或者HEAD~0,不会产生任何效果。
通过以下公式,可以直观的反映出三个参数的区别:
git reset --mixed <commit> + git add . = git reset --soft <commit>
git reset --hard <commit>
= git reset --soft <commit> + git reset --hard HEAD
= git reset --mixed <commit> + git reset --hard HEAD
详细的介绍,可以参考CSDN的文章: 关于 git reset 命令几个常用参数的理解 。
需要指出的是,文章对--hard参数的说明不完全准确。--hard舍弃的提交,并没有彻底删除,还存在仓库里,如果知道被舍弃提交的hashcode,仍然可以恢复该提交。
当要回退到之前某一次提交,并修改文件,且不希望放弃后面已有提交的时候,有两种操作方式。
如果想在本地完成,可以在reset之前,新建一个分支,保存状态;在reset之后,修改文件,并提交,然后将新建分支合并到reset所在分支。这时,需手动消除冲突,重新跟踪被修改文件,并提交。最后push到远程仓库。
上图显示的就是这一过程。
我们在状态C,新建分支branch-C,然后在master分支,reset到状态B,修改文件,并提交状态B1。这时,如果将branch-C合并到master,Git会提示冲突,需要手动消除。
如果借助远程仓库,则不必新建分支,直接reset到之前的某一次提交,修改文件,然后提交。这时,如果直接push到远程仓库,Git会提示失败,需要pull远程仓库到本地,然后手动消除冲突,重新跟踪被修改的文件,并提交,最后push。
上图显示了这一过程。
在commit d809fd46,reset到状态B,修改文件,并提交状态B2。这时,如果直接push,Git会提示失败,需要先pull远程仓库到本地,Git提示冲突,然后手动消除冲突。
以上是关于git篇之reset的主要内容,如果未能解决你的问题,请参考以下文章
Git学习篇之git remote add origin错误
持续集成高级篇之Jenkins Pipeline git拉取