git reset 与 git revert的区别?

一,git reset的功能:

      该命令修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,

      说明:

      修改后,push到远程仓库时需要使用“git push -f”提交更改

      原因:因为我们本地库HEAD指向的版本比远程库的要旧

 说明:架构森林是一个专注架构的博客,对应的源码可以访问这里获取

          https://github.com/liuhongdi/

 说明:作者邮箱: [email protected]

二,git revert的功能:

      git revert与git reset不同,它复制了一个目标版本(某个想要回退到的历史版本)加在当前分支的最前端。

      而git reset是HEAD指针跳到目标版本,但将跳过的版本丢弃掉了。(git log已经看不到,git reflog还是可以看到的)

三,git reset 的例子:

     

root@kubuntu:/data/git/clog# git log --pretty=oneline
6a1ea30d1f70c747d9f2bb6282b1f6b2e75ccf05 (HEAD
-> dev) e 89a1b44dc8c491742382f0cb7d528a5652023ee9 d c1d316f17dcbe0c8ee42361ffaaa19fa7c8ff616 (master) c 31b4f3173bd46947a671db7a174b4044aca617c1 b cda25664a84b8a27fedbaf436e302781e51fc0e9 (tag: a) a 7f5d3f71a244920c390b761921687adafcdf8b45 初始化文件
root@kubuntu:
/data/git/clog# git reset --hard 31b4f3173bd46947a671db7a174b4044aca617c1 HEAD 现在位于 31b4f31 b
root@kubuntu:
/data/git/clog# git log --pretty=oneline 31b4f3173bd46947a671db7a174b4044aca617c1 (HEAD -> dev) b
cda25664a84b8a27fedbaf436e302781e51fc0e9 (tag: a) a 7f5d3f71a244920c390b761921687adafcdf8b45 初始化文件

四,git revert的例子:

当使用revert反做到某个commit时,可能会产生冲突,

这时需要手动解决冲突

看例子:

root@kubuntu:/data/git/clog# git revert -n 31b4f3173bd46947a671db7a174b4044aca617c1
error: 不能还原 31b4f31... b
提示:冲突解决完毕后,用 'git add <路径>''git rm <路径>'
提示:命令标记修正后的文件

解决冲突完成后,commit即可:

root@kubuntu:/data/git/clog# git add -A
root@kubuntu:/data/git/clog# git commit -m "解决冲突";
[dev a5aea62] 解决冲突
 1 file changed, 3 deletions(-)

五,git reset --hard与 git reset --soft的区别?

--hard : 回退版本库,暂存区,工作区。(因此我们修改过的代码就没了,需要谨慎使用)

--mixed: 回退版本库,暂存区。(--mixed为git reset的默认参数,即当任何参数都不加的时候的参数)

--soft: 回退版本库。

说明:打开reset的帮助文档即可了解:

root@kubuntu:/data/git/clog# git reset -h
用法:git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<提交>]
   或:git reset [-q] [<树或提交>] [--] <路径>...
   或:git reset --patch [<树或提交>] [--] [<路径>...]
    -q, --quiet           安静模式,只报告错误
    --mixed               重置 HEAD 和索引
    --soft                只重置 HEAD
    --hard                重置 HEAD、索引和工作区
    --merge               重置 HEAD、索引和工作区
    --keep                重置 HEAD 但保存本地变更
    --recurse-submodules[=<reset>]
                          control recursive updating of submodules
    -p, --patch           交互式挑选数据块
    -N, --intent-to-add   将删除的路径标记为稍后添加

猜你喜欢

转载自www.cnblogs.com/architectforest/p/12323391.html