本文正在参加「金石计划 . 瓜分6万现金大奖」
📖阅读本文,您将收获
- 工作中如何使用 Git回退到某一个历史提交记录
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员工问题
解决A员工的问题有两种方法:git reset、git revert,它们都能达到回退至某个历史git提交记录目的。
git revert
现在把git历史记录回退到A员工提交的"A员工:您好!",复制commit记录唯一值。
执行git revert commit-id
git 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命令。
另外,如果文章内容对您有所帮助,帮我点赞+评论+关注就是对我的最大的支持❤️