• 官网首页
  • 在线网盘高速免费
  • 圈子社区
  • 帮助中心
  • 关于我们
  • 软柠科技
  • 云服务
文章
文章商铺文档快讯圈子网址导航用户
您有个重要的通知!一定要查看

{{userData.name}}已认证

文章

评论

关注

粉丝

¥{{role.user_data.money}}
{{role.user_data.credit}}
您已完成今天任务的
  • 私信列表所有往来私信

  • 财富管理余额、积分管理

  • 推广中心推广有奖励

    NEW
  • 任务中心每日任务

    NEW
  • 成为会员购买付费会员

  • 认证服务申请认证

    NEW
  • 我的订单查看我的订单

  • 我的设置编辑个人资料

  • 小黑屋关进小黑屋的人

    NEW
  • 进入后台管理

Git入门(十):撤销修改

  • 分享
  • 24年2月18日
  • 编辑
LBenedict

现在假设这样一个场景:

深夜两点的加班狂欢仍在继续,咖啡杯旁的readme.txt文件见证了我工作报告的进展。在键盘的敲击声中,我不小心加入了一行可能会让我后悔终生的文字:“My stupid boss still prefers SVN.”

就在我准备提交这份报告,将我的辛勤努力化为版本库中一串美丽的哈希值时,咖啡的香气和屏幕的冷光让我瞬间清醒。我瞪大了眼睛,看着屏幕上的那行文字,仿佛看到了老板愤怒的脸庞和即将消失的奖金。

幸好,Git这个救星总是在关键时刻出现。我迅速执行了git status来查看当前的状态:

$ git status  
On branch master  
Changes not staged for commit:  
  (use "git add <file>..." to update what will be committed)  
  (use "git checkout -- <file>..." to discard changes in working directory)  
  
 modified:   readme.txt  
  
no changes added to commit (use "git add" and/or "git commit -a")

Git告诉我,我的修改还没有被放入暂存区,而git checkout -- <file>这个魔法命令可以帮我撤销这些修改。我深吸了一口气,轻轻敲下命令:

$ git checkout -- readme.txt

仿佛时间倒流,readme.txt文件瞬间回到了它最纯洁的状态,那句冒犯之语消失得无影无踪。我再次查看文件内容,确认一切已经恢复如初:

$ cat readme.txt  
Git is a distributed version control system.  
Git is free software distributed under the GPL.  
Git has a Mutable index called stage.  
Git tracks changes of files.

git checkout -- file命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令,我们在后面的分支管理中会再次遇到git checkout命令。

现在让这个场景更凶险些:

凌晨三点,我依然在键盘上飞舞,咖啡因与我并肩作战,对抗着即将到来的截止日期。不幸的是,我不仅在readme.txt文件中加入了荒谬的内容,并且用git add命令把它放入了暂存区。

我瞪大了眼睛,试图从这段文字中找出任何理智的迹象,但一切似乎都太晚了。然而,在我准备绝望地按下git commit按钮之前,我突然意识到——还有机会!我可以用git status来查看当前的状态:

$ git status  
On branch master  
Changes to be committed:  
  (use "git reset HEAD <file>..." to unstage)  
  
 modified:   readme.txt

看到这条信息,我仿佛看到了希望的曙光。Git告诉我,我可以用git reset HEAD <file>命令来撤销暂存区的修改。这就像是一个时间门,可以让我回到做出错误决定之前的状态。

我迅速执行了命令:

$ git reset HEAD readme.txt  
Unstaged changes after reset:  
M  readme.txt

git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

我再次运行git status来确认状态:

$ git status  
On branch master  
Changes not staged for commit:  
  (use "git add <file>..." to update what will be committed)  
  (use "git checkout -- <file>..." to discard changes in working directory)  
  
 modified:   readme.txt

还记得如何丢弃工作区的修改吗?

$ git checkout -- readme.txt

$ git status
On branch master
nothing to commit, working tree clean

readme.txt文件再次变得清洁无瑕,就像什么都没有发生过一样。我长长地松了一口气,感觉整个世界都重新回到了秩序之中。

继续让头脑发昏:

现在是凌晨四点,咖啡已经见底,为了赶上DeadLine我已逐渐神志不清,不但改错了东西,还从暂存区提交到了版本库,怎么办呢?还记得版本回退一节吗?可以回退到上一个版本。不过,这是有条件的,就是还没有把自己的本地版本库推送到远程。还记得Git是分布式版本控制系统吗?我们后面会讲到远程版本库,一旦把stupid boss提交推送到远程版本库,oh……no……

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
1 条回复 A文章作者 M管理员

您必须登录或注册以后才能发表评论

  1. qsbr
    qsbr 银币lv2
    24年2月19日

    好

LBenedict

钻石lv4

文章

67

评论

0

关注

1

粉丝

2
[文章] Java从入门到放弃(三十二):内部类
[文章] Java从入门到放弃(三十一):作用域
[文章] Java从入门到放弃(三十):包

导航

向你推荐
蓝屏工具箱:插件商店开启系统工具新境界
蓝屏工具箱以其简洁大气的界面设计首先映入用户眼帘。4.0 版本采用的新一代 SUI3.0 界面,犹如一幅精美的画卷,将复杂的功能逻辑有序排列,既展现出强大的功能性,又不失简洁之美。用户无需在繁琐的菜单中苦苦寻觅,轻松上手操作
立即查看
平台等级福利与新模式
等级相关规定与福利如下;我们将以可使用积分兑换服务器等方式进行管理;这是为了让用户自觉遵守平台规定,我们也会一点一点守护平台制度。 权限相关如下
立即查看
投稿作品得丰富推广额度,同时可得丰富奖励
点此进行发布文章和您的作品,获取精彩丰富福利,加入活动即可生效
立即体验
宣传本站得2h2g服务器!下阶返利!
活动即日起生效;用户可以使用任何方式,例如:返利优惠、搭建源码推荐服务器、广告位推荐等方式获得10位以上的下阶用户即可获得2h2g的服务器为期1个月
立即查看
Slide
关于我们

公司介绍

公司团队

我们的追求

加入我们

相关平台

软柠账号

支持

客服

文档中心

Andolstar

公司媒介

财务报告

投资者关系

公告

博客文章

我们的业务

云数据

互动娱乐

音乐

影像

外包开发

解决方案定制

合作相关

软件合作

广告投放

项目合作

其它合作

产品集

工坊

农业自动化

建站BOX

RNOS

小夕灯具

版权归属所有权©2024杭州软柠科技有限公司/主办上海枫汇网络科技有限公司。保留所有权利。

切换语言:简/ EN

服务协议 | Cookie政策 | 服务条款 | 法律声明 | 浙ICP备2024117703号-2 | 浙公网安备33010802013612号 | 本站:沪ICP备2022008782号-7

首页专题认证
搜索菜单我的

你有新的私信

请务必要查看您的私信哟~~