2023-03-08
Git
00

目录

📖阅读本文,您将收获
预设场景
解决A员工问题
git revert
git reset
git revert与git revert的区别
总结

封面2.jpeg

📖阅读本文,您将收获

  • 工作中如何使用 Git回退到某一个历史提交记录
  • git resetgit 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 resetgit revert,它们都能达到回退至某个历史git提交记录目的。

git revert

现在把git历史记录回退到A员工提交的"A员工:您好!",复制commit记录唯一值。

执行git revert commit-id

Bash
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 revertgit revert的区别

  • git revertgit reset都能完成Git 记录回退代码的目的
  • git revert相当于新增一条Git记录,不会消除已存在的记录
  • git reset 会消除存在的记录,并且push 至远程需要强制推送;多人协同时,在回退期间并不能保证其他人有没有提交过代码,所以强制推送是有风险的,它容易覆盖掉其他人提交的代码

总结

使用git revert、git reset都能帮助我们回退历史记录,但git reset需要进行强制推送至远程,有风险。工作中更推荐使用git revert命令。

另外,如果文章内容对您有所帮助,帮我点赞+评论+关注就是对我的最大的支持❤️

本文作者:凌览

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!