相关技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > 相关技巧 > git reset revert

git中reset和revert区别小结

作者:Alan0517

本文主要介绍了git中reset和revert区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1. 案例

线上master分支不可信,需要回到某个分支;
但是很多人习惯把一个需求,分多次commit,于是会出现下面这种情况

基于这种情况,git revert 就不如 git reset好用,可以借助Idea,直接通过 git reset --hard 指向需要回退到的commit,然后随便找个地方,敲上一个空格,产生一次新的commit id,即可达到效果;

2. git的 reset 和 revert 有啥区别?

2.1 问题背景

在某一次的上线中,发现有的同学,上线之后发现master 分支存在bug,线上回滚之后,在处理git仓库回滚分支时,因分不清
reset(重置)revert(恢复) 两者的区别,使用git reset回退之后,再与master merge时,发现master无变化,因为作为此次引入案例,分享一波;

先简单说一下,在提交到远程库之前我们使用git reset 命令完全可以满足我们 撤销操作的需求,如果操作已经提交到远程库,那只好使用 git revert 来提交一个新的撤销操作 撤销 需要撤销的那次commit

2.2 git的工作流

在将文件提交至远程端时,文件的提交需要经过git add、git commit及git push三个过程才能提交至git远程仓库。
我们平时修改文件在工作目录中,提交时先使用git add提交至暂存区,再通过git commit提交至本地仓库,最后才能使用git push提交至远程仓库。

2.2.1 在工作区的代码

git checkout -- . # 丢弃全部

注意:git checkout – . 丢弃全部,也包括:新增的文件会被删除、删除的文件会恢复回来、修改的文件会回去。这几个前提都说的是,回到暂存区之前的样子。对之前保存在暂存区里的代码不会有任何影响。对commit提交到本地分支的代码就更没影响了。当然,如果你之前压根都没有暂存或commit,那就是回到你上次pull下来的样子了。

2.2.2 代码git add到缓存区,并未commit提交

git reset HEAD .  或者
git reset HEAD a.txt

这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化

2.2.3 git commit到本地分支、但没有git push到远程

git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>  # 回到其中你想要的某个版
或者
git reset --hard HEAD^  # 回到最新的一次提交
或者
git reset HEAD^  # 此时代码保留,回到 git add 之前

2.2.4 git push把修改提交到远程仓库

2.2.4.1 通过git reset是直接删除指定的commit

git log # 得到你需要回退一次提交的commit id
git reset --hard <commit_id>
git push origin HEAD --force 
# 强制提交一次,之前错误的提交就从远程仓库删除

2.2.4.2 通过git revert是用一次新的commit来回滚之前的commit

git log # 得到你需要回退一次提交的commit id
git revert <commit_id>  # 撤销指定的版本,撤销也会作为一次提交进行保存
git commit -m "......." 
git push 

2.3 reset

git reset中有三个命令(–hard、–soft与–mixed);主要用于工作区、暂存区、本地仓库三个区域的文件提交撤回

git reset --hard xxx

hard (修改版本库,修改暂存区,修改工作区)

git reset --soft xxx

soft (修改版本库,保留暂存区,保留工作区)

2.4 revert

git revert xxx

– git revert 也是撤销命令,区别在于reset是指向原地或者向前移动指针,git revert是创建一个commit来覆盖当前的commit,指针向后移动。

2.5 git revert 和 git reset的区别

通俗易懂的说呢,就是git revert 是回滚当前此次的commit,回到上一个状态,就好比咱们习惯性用的Ctrl+z; 而git reset 是回到历史某个版本,它的commit是旧的,是历史的,而git revert 会产生新的commit,就这么回事

到此这篇关于git中reset和revert区别小结的文章就介绍到这了,更多相关git reset revert内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文