git reset
与git revert
两者的区别我们先假设一个理想的场景,
某公司有A、B两位员工共同维护一个项目
现在A、B都向Git源仓库提交过代码,A、B提交的历史记录如下:
A员工提交:A员工: 您好!
提交的内容变动:
index.js
文件,并且写入console.log('A员工:您好!');
B员工提交:B员工:点赞
提交内容变动:
index.js
文件中console.log('A员工:您好!');
这一行代码,并且写入console.log('B员工:点赞')
main.js
文件,写入console.log('B员工:您好!');
A员工再次提交:B员工:瞎改,我锤你哦
提交内容变动:
main.js
文件中添加一行console.log('A员工:动我代码,我跟你拼命');
A、B员工Git历史提交顺序:
问题:B员工因删了A员工的代码,被A员工怼了一顿;现在A员工想自己找回被B员工删除的代码,该什么做呢?
解决A员工的问题有两种方法:git reset
、git revert
,它们都能达到回退至某个历史git提交记录目的。
git revert
现在把git历史记录回退到A员工提交的"A员工:您好!",复制commit记录唯一值。
执行git revert commit-id
Bashgit revert 65ddd52968631b718021fdb2abd9f423cb71ce2d
解决冲突后,重新git add 、git commit、git push
提交至远程仓库即可。
使用git revert
相当于增加一个git commit
,它依旧会保留以前的历史记录。
git reset
相同的,我们把git历史记录回退到A员工提交的"A员工:您好!",此时与git revert
稍有不同;需要使用提交记录"A员工:你好!"的commit id。将git 历史记录"A员工:你好!"之后提交的所有记录回退。
回退后,本地代码与远程仓库不同步;因此在推送远程需要强制推送git push ... -f
,强行覆盖远程仓库。
git revert
与git revert
的区别git revert
、git reset
都能完成Git 记录回退代码的目的git revert
相当于新增一条Git记录,不会消除已存在的记录git reset
会消除存在的记录,并且push
至远程需要强制推送;多人协同时,在回退期间并不能保证其他人有没有提交过代码,所以强制推送是有风险的,它容易覆盖掉其他人提交的代码使用git revert、git reset
都能帮助我们回退历史记录,但git reset
需要进行强制推送至远程,有风险。工作中更推荐使用git revert
命令。
另外,如果文章内容对您有所帮助,帮我点赞+评论+关注就是对我的最大的支持❤️
本文作者:凌览
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!