当前位置: 首页 > news >正文

git回滚相关命令指南

目录

查看 Git 历史

1. 基本查看命令

2. 查看具体改动

Git 回滚操作

1. 撤销工作区修改

2. 撤销暂存区修改

3. 回滚提交历史

4. 查找特定提交

常用回滚场景

场景1:撤销最近一次提交但保留改动

场景2:完全撤销最近一次提交

场景3:撤销已经推送到远程的提交

场景4:回到某个特定提交

注意事项

本地操作 vs 远程操作

仅影响本地的操作:

影响远程仓库的操作:

不同回滚方式对远程的影响:

1. 使用 git revert(推荐用于已推送的提交)

2. 使用 git reset 后强制推送(危险)

本地提交回滚

远程提交回滚

主要区别


在 Git 中查看历史和回滚操作是版本控制的重要功能。以下是常用的方法:

查看 Git 历史

1. 基本查看命令

# 查看提交历史
git log# 查看简洁历史(一行显示)
git log --oneline# 查看最近几次提交
git log -n 5  # 查看最近5次提交# 图形化查看分支历史
git log --graph --oneline --all

2. 查看具体改动

# 查看某次提交的详细内容
git show <commit-id># 查看文件的修改历史
git log -p <file-path># 查看某次提交中某个文件的改动
git show <commit-id> <file-path>

Git 回滚操作

1. 撤销工作区修改

# 撤销单个文件的修改
git checkout -- <file-path># 撤销所有工作区修改
git checkout -- .# Git 2.23+ 版本推荐使用
git restore <file-path>

2. 撤销暂存区修改

# 取消暂存单个文件
git reset HEAD <file-path># 取消暂存所有文件
git reset HEAD# Git 2.23+ 版本推荐使用
git restore --staged <file-path>

3. 回滚提交历史

# 软回滚(保留工作区和暂存区改动)
git reset --soft <commit-id># 混合回滚(保留工作区改动,清空暂存区)
git reset --mixed <commit-id># 硬回滚(完全回滚到指定版本,危险操作)
git reset --hard <commit-id># 创建新提交来撤销之前的提交(推荐用于已推送的提交)
git revert <commit-id>

4. 查找特定提交

# 根据提交信息搜索
git log --grep="关键字"# 根据文件内容变化搜索
git log -S "代码片段"# 查看某个分支的历史
git log <branch-name>

常用回滚场景

场景1:撤销最近一次提交但保留改动

git reset --soft HEAD~1

场景2:完全撤销最近一次提交

git reset --hard HEAD~1

场景3:撤销已经推送到远程的提交

git revert <commit-id>
git push origin <branch-name>

场景4:回到某个特定提交

git log --oneline  # 找到目标commit-id
git reset --hard <commit-id>

注意事项

  • git reset --hard 是危险操作,会丢失所有未提交的改动

  • 对于已经推送到远程的提交,建议使用 git revert 而不是 git reset

  • 执行回滚操作前建议先备份当前状态

  • 可以使用 git reflog 查看所有操作历史,用于恢复误操作

上述提到的回滚操作有不同的影响范围:

本地操作 vs 远程操作

仅影响本地的操作:

# 这些命令只影响本地仓库
git reset --soft <commit-id>
git reset --mixed <commit-id>
git reset --hard <commit-id>
git checkout -- <file-path>
git restore <file-path>

影响远程仓库的操作:

# 需要显式推送到远程仓库才会产生影响
git push origin <branch-name>           # 推送本地更改到远程
git push --force origin <branch-name>   # 强制推送(覆盖远程历史)
git push --force-with-lease origin <branch-name>  # 更安全的强制推送
git revert <commit-id>                  # 创建新提交撤销旧提交
git push origin <branch-name>          # 推送revert提交

不同回滚方式对远程的影响:

1. 使用 git revert(推荐用于已推送的提交)

# 创建新提交来撤销之前的更改(安全)
git revert <commit-id>
git push origin <branch-name>  # 推送撤销提交到远程

2. 使用 git reset 后强制推送(危险)

# 本地回滚
git reset --hard <commit-id>
# 强制推送到远程(会改写远程历史,影响其他开发者)
git push --force-with-lease origin <branch-name>

  1. 对于未推送的本地提交:可以自由使用 git reset

  2. 对于已推送的提交

    1. 如果是最近的提交且确定没有其他人在使用,可以考虑 git push --force-with-lease

    2. 更安全的方式是使用 git revert 创建新提交来撤销

  3. 团队协作中:优先使用 git revert,避免改写公共历史

    在进行版本回滚时,需要区分是本地提交还是远程提交,因为两者的处理方式和影响范围不同:

    本地提交回滚

    • 影响范围:仅影响本地仓库

    • 操作方式

      • 使用 git reset 命令回滚本地提交

      • 可以使用 --soft--mixed--hard 参数控制回滚程度

    • 示例

      git reset --hard HEAD~1  # 回滚到上一个提交
      git reset --hard <commit-hash>  # 回滚到指定提交

      远程提交回滚

      • 影响范围:影响所有协作者和远程仓库

      • 操作方式

        • 需要使用 git revert 创建新的提交来撤销之前的更改

        • 或者在特殊情况下使用 git push --force 强制推送(需要谨慎)

      • 示例

        git revert <commit-hash>  # 创建新提交撤销指定提交
        git push origin <branch-name>  # 推送到远程仓库

        主要区别

        1. 协作影响

          1. 本地提交回滚只影响当前开发者

          2. 远程提交回滚会影响所有团队成员

          3. 操作安全性

            1. 本地回滚可以使用 git reset 直接修改历史

            2. 远程回滚建议使用 git revert 保持历史完整性

            3. 恢复难度

              1. 本地回滚后,被重置的提交可能难以恢复

              2. 使用 git revert 的远程回滚更容易恢复

              因此,在回滚指定版本时,必须明确区分本地和远程提交,并采用相应的安全操作方式。

              http://www.dtcms.com/a/344459.html

              相关文章:

            4. 机器学习概述:从零开始理解人工智能的核心技术
            5. 树莓派安装pyqt5 opencv等库一些问题
            6. 力扣面试150(63/150)
            7. C++显示类型转换运算符static_cast使用指南
            8. 偶现型Bug处理方法---用系统方法对抗随机性
            9. 一、Python IDLE安装(python官网下的环境安装)
            10. ArrayList vs LinkedList:底层原理与实战选择指南
            11. 企业设备系统选型:功能适配度分析
            12. Java多线程面试题二
            13. 视频清晰度:静态码率比动态码率更优秀吗?
            14. 从零搭建 React 工程化项目
            15. 本地通过跳板机连接无公网IP的内网服务器
            16. 哈尔滨云前沿服务器托管的优势
            17. 【Linux仓库】进程的“夺舍”与“飞升”:exec 驱动的应用现代化部署流水线
            18. 前端github-workflows部署腾讯云轻量服务器
            19. 学云计算还是网络,选哪个好?
            20. Linux:网络层IP协议
            21. alicloud 阿里云有哪些日志 审计日志
            22. css的white-space: pre
            23. Docker 命令大全
            24. VsCode 上的Opencv(C++)环境配置(Linux)
            25. 四种方法把 Proxy 对象代理数组处理成普通数组
            26. URP+Unistorm5.3.0 -> webGL天空黑屏的处理
            27. 如何精准高效地比对两份合同的差异?
            28. Java数据结构——7.2 二叉树-二叉树
            29. MPLS原理
            30. 新能源知识库(84)什么是IEC白皮书
            31. 初识数据结构——Map和Set:哈希表与二叉搜索树的魔法对决
            32. CoreShop微信小程序商城框架开启多租户-添加一个WPF客户端以便进行本地操作--读取店铺信息(6)
            33. 循环神经网络实战:GRU 对比 LSTM 的中文情感分析(三)