位置: 编程技术 - 正文

Git中一些撤销和恢复命令的使用小结(git checkout撤销)

编辑:rootadmin

推荐整理分享Git中一些撤销和恢复命令的使用小结(git checkout撤销),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:git撤销所有提交,git撤销中间某次提交,git撤销中间某次提交,撤销git add.,撤销git rebase,撤销git rebase,git 撤销某次merge,git 撤销某次merge,内容如对您有帮助,希望把文章链接给更多的朋友!

撤销一个“已公开”的改变

场景: 你已经执行了 git push, 把你的修改发送到了 GitHub,现在你意识到这些 commit 的其中一个是有问题的,你需要撤销那一个 commit.

方法:复制代码代码如下:git revert <SHA>

原理: git revert 会产生一个新的 commit,它和指定 SHA 对应的 commit 是相反的(或者说是反转的)。如果原先的 commit 是“物质”,新的 commit 就是“反物质” — 任何从原先的 commit 里删除的内容会在新的 commit 里被加回去,任何在原先的 commit 里加入的内容会在新的 commit 里被删除。

这是 Git 最安全、最基本的撤销场景,因为它并不会改变历史 — 所以你现在可以 git push 新的“反转” commit 来抵消你错误提交的 commit。

撤销“本地的”修改

场景: 一只猫从键盘上走过,无意中保存了修改,然后破坏了编辑器。不过,你还没有 commit 这些修改。你想要恢复被修改文件里的所有内容 — 就像上次 commit 的时候一模一样。

方法:复制代码代码如下:git checkout -- <bad filename>

原理: git checkout 会把工作目录里的文件修改到 Git 之前记录的某个状态。你可以提供一个你想返回的分支名或特定 SHA ,或者在缺省情况下,Git 会认为你希望 checkout 的是 HEAD,当前 checkout 分支的最后一次 commit。

记住:你用这种方法“撤销”的任何修改真的会完全消失。因为它们从来没有被提交过,所以之后 Git 也无法帮助我们恢复它们。你要确保自己了解你在这个操作里扔掉的东西是什么!(也许可以先利用 git diff 确认一下)Git仓库撤销至前一次提交时的状态

复制代码代码如下:$ git checkout <SHA>“”是你想查看的提交拥有的哈希值Hash Code中前8至个字符。 这个命令会使<HEAD>指针脱离detach,可以让你在不检出check out任何分支的情况下查看代码——脱离HEAD并不像听上去那么可怕。如果你想在这种情况下提交修改,你可以通过创建新的分支来实现:

复制代码代码如下:$ git checkout -b <SHA>要想回到当前的工作进度,只需要检出check out你之前所在的分支即可。

撤销最近一次代码提交有时候你可能会不小心提交了错误的文件或一开始就遗漏了某些东西。下面这三步操作可以帮助你解决这个问题。复制代码代码如下:$ git reset --soft HEAD~1# 对工作文件进行必要的更改$ git add -A .$ git commit -c ORIG_HEAD你执行第一个命令时,Git会将HEAD指针后移到此前的一次提交,之后你才能移动文件或作必要的修改。

然后你就可以添加所有的修改,而且当你执行最后的命令时,Git会打开你的默认文本编辑器,其中会包含上一次提交时的信息。如果愿意的话,你可以修改提交信息,或者你也可以在最后的命令中使用-C而不是-c,来跳过这一步。

撤销合并Merge要想撤销合并,你可能必须要使用恢复命令HARD RESET回到上一次提交的状态。“合并”所做的工作基本上就是重置索引,更新working tree(工作树)中的不同文件,即当前提交()代码中与HEAD游标所指向代码之间的不同文件;但是合并会保留索引与working tree之间的差异部分(例如那些没有被追踪的修改)。复制代码代码如下:$ git checkout -b <SHA>

在撤销“本地修改”之后再恢复

场景: 你提交了几个 commit,然后用 git reset --hard 撤销了这些修改(见上一段),接着你又意识到:你希望还原这些修改!

Git中一些撤销和恢复命令的使用小结(git checkout撤销)

方法:复制代码代码如下:git reflog 和复制代码代码如下:git reset或复制代码代码如下: git checkout

原理: git reflog 对于恢复项目历史是一个超棒的资源。你可以恢复几乎 任何东西 — 任何你 commit 过的东西 — 只要通过 reflog。

你可能已经熟悉了 git log 命令,它会显示 commit 的列表。 git reflog 也是类似的,不过它显示的是一个 HEAD 发生改变的时间列表.

一些注意事项:

它涉及的只是 HEAD 的改变。在你切换分支、用 git commit 进行提交、以及用 git reset 撤销 commit 时,HEAD 会改变,但当你用 git checkout -- <bad filename> 撤销时(正如我们在前面讲到的情况),HEAD 并不会改变 — 如前所述,这些修改从来没有被提交过,因此 reflog 也无法帮助我们恢复它们。git reflog 不会永远保持。Git 会定期清理那些 “用不到的” 对象。不要指望几个月前的提交还一直躺在那里。你的 reflog 就是你的,只是你的。你不能用 git reflog 来恢复另一个开发者没有 push 过的 commit。

大量的撤销/恢复

场景: 你向某个方向开始实现一个特性,但是半路你意识到另一个方案更好。你已经进行了十几次提交,但你现在只需要其中的一部分。你希望其他不需要的提交统统消失。

方法:复制代码代码如下:git rebase -i <earlier SHA>

原理: -i 参数让 rebase 进入“交互模式”。它开始类似于前面讨论的 rebase,但在重新进行任何提交之前,它会暂停下来并允许你详细地修改每个提交。

rebase -i 会打开你的缺省文本编辑器,里面列出候选的提交。如下所示:

前面两列是键:第一个是选定的命令,对应第二列里的 SHA 确定的 commit。缺省情况下, rebase -i 假定每个 commit 都要通过 pick 命令被运用。

要丢弃一个 commit,只要在编辑器里删除那一行就行了。如果你不再需要项目里的那几个错误的提交,你可以删除上例中的1、3、4行。

如果你需要保留 commit 的内容,而是对 commit 消息进行编辑,你可以使用 reword 命令。 把第一列里的 pick 替换为 reword (或者直接用 r)。有人会觉得在这里直接重写 commit 消息就行了,但是这样不管用 —rebase -i 会忽略 SHA 列前面的任何东西。它后面的文本只是用来帮助我们记住 fe2 是干啥的。当你完成 rebase -i 的操作之后,你会被提示输入需要编写的任何 commit 消息。

如果你需要把两个 commit 合并到一起,你可以使用 squash 或 fixup 命令,如下所示:

squash 和 fixup 会“向上”合并 — 带有这两个命令的 commit 会被合并到它的前一个 commit 里。在这个例子里, fe2 和 e 会被合并成一个 commit, f5e4e 和 aff 会被合并成另一个。

如果你选择了 squash, Git 会提示我们给新合并的 commit 一个新的 commit 消息; fixup 则会把合并清单里第一个 commit 的消息直接给新合并的 commit 。 这里,你知道 aff 是一个“完了完了….” 的 commit,所以你会留着 f5e4e as的 commit 消息,但你会给合并了 fe2 和 e 的新 commit 编写一个新的消息。

在你保存并退出编辑器的时候,Git 会按从顶部到底部的顺序运用你的 commit。你可以通过在保存前修改 commit 顺序来改变运用的顺序。如果你愿意,你也可以通过如下安排把 aff 和 fe2 合并到一起:

Git上一些修改错误操作的命令使用技巧 修改错误的提交信息commitmessage提交信息很长时间内会一直保留在你的代码库codebase中,所以你肯定希望通过这个信息正确地了解代码修改情况。下面这

mac怎么隐藏文件 苹果系统隐藏文件方法汇总 mac如何隐藏文件呢?我们知道在windows系统下隐藏文件很简单,右键点击选「属性」选择「隐藏」即可,那么在mac系统下我们要如何隐藏呢?隐藏只是保护

Mac怎么安装并配置Homebrew? 在Mac上安装Homebrew时可能会遇到这样的错误提示:curl:()ServerabortedtheSSLhandshake,下面就详细介绍下如何在Mac上安装homebrew1、打开Mack中的命令行工具2、在

标签: git checkout撤销

本文链接地址:https://www.jiuchutong.com/biancheng/353018.html 转载请保留说明!

上一篇:Mac系统怎么一键回到桌面?mac系统快速回到桌面的教程(mac怎么一键关机)

下一篇:Git上一些修改错误操作的命令使用技巧(git不小心改了master)

  • 征信高风险是什么意思
  • 哪些企业需要纳税
  • 一般纳税人劳务税率是多少2023
  • 认缴出资怎么填财务报表
  • 公司哪些支出不影响报表净利润总额
  • 以非现金资产清偿债务的方式下,债权人
  • 开具有误拒收的增值税专用发票怎么办?
  • 将外购商品作为非货币性
  • 退预收账款需要什么原始凭证
  • 工程项目中的设备主要包括什么和什么
  • 企业发生的借款费用,可直接归属于
  • 产假期间工资如何发放
  • 税控盘清盘怎么做
  • 建筑分包项目有哪些内容
  • 小规模企业房产税怎么算
  • 税务代开劳务费税点如何确定
  • 小微企业附加税优惠政策2023
  • 股权转让需要什么资料
  • 利润表季度报表
  • 收到财政补助资金怎么办
  • 怎么判断企业是一般纳税人还是小规模
  • 完成产值怎么算
  • prevsrv.exe - prevsrv是什么进程 有什么用
  • 在线网速测试网站测速工具
  • 鸿蒙系统怎么升级3.0
  • win10系统如何设置开机启动软件
  • win10下载软件被阻止安装怎么办
  • 鸿蒙系统进入工程菜单
  • win7系统还原系统保护关闭
  • 视同销售成本如何确认?
  • linux入门学习
  • 尿急尿频尿不尽吃什么药效果好
  • 员工离职当月社保怎么扣除
  • 企业的存货采用计划成本核算,某年年末,结
  • 购买加油卡如何开发票
  • 免税的农业企业可以抵扣专票吗
  • 企业所得税核定征收方法有哪两种
  • php反射的原理
  • 训练自己的GPT模型 中文改英文
  • 上月开了红字发票当月如何申报
  • Selenium.Webdriver最新语法教程(附Chrome实例演示)
  • python 统计学包
  • php 循环
  • 已申报未导入是什么情况
  • 出租房屋房产税计算
  • 快递破损后赔偿还能把东西拿走吗
  • 分页 php
  • mongodb数据库中使用哪个数据库可以设置用户名和密码
  • 对公账户怎么查询开户行
  • 商贸公司分录大全
  • 小企业会计准则跨年红冲
  • 交车辆保险的车是什么车
  • 代扣代缴个人所得税账务处理
  • 顾问费交多少税
  • 支付劳务费后缴多少税
  • 代扣代缴的增值税额
  • 关于购买安保器材的报告
  • 用于研发购买的材料进项税额
  • 研发费用计入营业成本还能加计扣除吗
  • 退货与销售折让的区别
  • 股权转让如何支付利润
  • 商业折扣入账
  • 银行日记账怎么导出
  • vistaie9安装所需更新补丁
  • Ubuntu系统怎么设置双屏
  • linux 主力机
  • 安装metpy
  • 如何删除win7系统自带游戏软件
  • javascript学习指南
  • ie11滚动条样式
  • ajax的异步是什么意思
  • 我吐槽你
  • 查看系统网络连接数
  • jquery设置图片路径
  • linux查看shell脚本内容
  • android中的常用布局有哪几种?
  • 2020年职工探亲路费报销最新规定
  • 出口退税外汇汇率如何确定
  • 盐城城南新区的邮政编码是多少号
  • 中国税务网发票怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设