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

{{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从入门到放弃(三十):包

导航

沪ICP备2022008782号-7 运营方:浙ICP备2024117703号-2 浙公网安备33010802013612号 ©2018-2025 上海枫汇网络科技有限公司/杭州软柠科技有限公司  软柠科技  开放平台 OAuth接口
首页专题认证
搜索菜单我的

你有新的私信

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

×