git 撤销已推送远程的提交

  • 原创
  • 作者:程序员三丰
  • 发布时间:2024-01-11 22:35
  • 浏览量:1071
本文介绍如何撤销已经推送到远程仓库的提交实践。

要撤销已经推送到远程仓库的提交,可以使用下面的命令来完成操作:

  1. 首先,需要查看当前分支上最新的提交记录。运行以下命令获取提交历史信息:

    git log --oneline -n <number_of_commits>
    

    其中 表示显示的提交数量,默认为 5。这将列出最近的提交记录及对应的 commit hash(版本号)。

  2. 确定要撤销的提交所在位置后,可以通过 revert 或者 reset 两种方式进行撤销。

    1. 如果想保留被撤销提交引入的更改并创建一个新的提交来反转该变化,则可以使用 revert 命令。运行以下命令:

      git revert <commit_hash>
      

      其中 是要撤销的提交的 commit hash。Git会自动生成一条新的提交来撤销指定的提交。

    2. 如果希望直接删除特定的提交及其相关修改,而不创建新的提交,则可以使用 reset 命令。有三种模式可选择:soft、mixed(默认) 和 hard。根据情况选择合适的模式。

      1. soft 模式只移动 HEAD 指向目标提交,工作区内容与之前没有任何变化;
      2. mixed 模式同时移动 HEAD 指向目标提交,并重置索引文件,但保留工作区内容;
      3. hard 模式同样移动 HEAD 指向目标提交,还会清空工作区内容,因此务必小心使用。

      运行以下命令:

      # soft mode
      git reset --soft <commit_hash>
      
      # mixed mode (默认)
      git reset --mixed <commit_hash>
      
      # hard mode
      git reset --hard <commit_hash>
      

      注意, 是要撤销的提交的 commit hash。

  3. 无论使用 revert 还是 reset,都需要再次执行 push 命令将更改推送到远程仓库:

     # 如果当前所在分支已与远程分支关联,则只需执行 push
     git push
    
     # 如果当前所在分支尚未与远程分支关联,那么 push 时需要指定远程分支名称
     git push origin <远程分支名称>
    
     # 由于此时分支版本号应该是落后于远程分支的版本号,git push 会报错如下:
     # error: failed to push some refs to 'xxxxxx'
     # hint: Updates were rejected bacause the tip of your current branch is behind
     # 解决办法是 **强制更新** ,执行命令如下:
     git push -f 或者 git push --force
    

    请注意:撤销已推送的提交可能会影响其他开发人员的工作,因此在执行此操作之前,请确保了解其可能造成的影响,并与团队成员进行沟通。

【扩展】使用git cherry-pick命令选择性地撤销远程提交
如果只需要撤销某一个文件或几个文件的提交,可以使用git cherry-pick命令选取需要的提交进行撤销。

总结:

  • 使用git reset可以快速撤销远程提交,但是需要注意冲突问题。
  • 使用git revert可以较为安全地撤销远程提交,但是会导致提交记录比较臃肿。
  • 使用git cherry-pick可以选择性地撤销远程提交,但是需要注意分支选择的问题。

根据实际情况选择合适的撤销方式。

声明:本文为原创文章,51blog.xyz和作者拥有版权,如需转载,请注明来源于51blog.xyz并保留原文链接:https://mp.51blog.xyz/article/58.html

文章归档

推荐文章

buildadmin logo
Thinkphp8 Vue3 Element PLus TypeScript Vite Pinia

🔥BuildAdmin是一个永久免费开源,无需授权即可商业使用,且使用了流行技术栈快速创建商业级后台管理系统。

热门标签

PHP ThinkPHP ThinkPHP5.1 Go Mysql Mysql5.7 Redis Linux CentOS7 Git HTML CSS CSS3 Javascript JQuery Vue LayUI VMware Uniapp 微信小程序 docker wiki Confluence7 学习笔记 uView ES6 Ant Design Pro of Vue React ThinkPHP6.0 chrome 扩展 翻译工具 Nuxt SSR 服务端渲染 scrollreveal.js ThinkPHP8.0 Mac webman 跨域CORS vscode GitHub ECharts Canvas