4 Git 基础 - 撤消操作

news/2024/7/7 19:46:53

撤消操作

任何时候,你都有可能需要撤消刚才所做的某些操作。接下来,我们会介绍一些基本的撤消操作相关的命令。请注意,有些撤销操作是不可逆的,所以请务必谨慎小心,一旦失误,就有可能丢失部分工作成果。

修改最后一次提交

有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,可以使用 --amend 选项重新提交:

$ git commit --amend

此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样。

启动文本编辑器后,会看到上次提交时的说明,编辑它确认没问题后保存退出,就会使用新的提交说明覆盖刚才失误的提交。

如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交:

$ git commit -m 'initial commit'
$ git add forgotten_file
$ git commit --amend

上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。

取消已经暂存的文件

接下来的两个小节将演示如何取消暂存区域中的文件,以及如何取消工作目录中已修改的文件。不用担心,查看文件状态的时候就提示了该如何撤消,所以不需要死记硬背。来看下面的例子,有两个修改过的文件,我们想要分开提交,但不小心用 git add . 全加到了暂存区域。该如何撤消暂存其中的一个文件呢?其实,git status 的命令输出已经告诉了我们该怎么做:

$ git add .
$ git status
On branch master
Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified:   README.txtmodified:   benchmarks.rb

就在 “Changes to be committed” 下面,括号中有提示,可以使用 git reset HEAD <file>... 的方式取消暂存。好吧,我们来试试取消暂存 benchmarks.rb 文件:

$ git reset HEAD benchmarks.rb
Unstaged changes after reset:
M       benchmarks.rb
$ git status
On branch master
Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified:   README.txtChanges 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:   benchmarks.rb

这条命令看起来有些古怪,先别管,能用就行。现在 benchmarks.rb 文件又回到了之前已修改未暂存的状态。

取消对文件的修改

如果觉得刚才对 benchmarks.rb 的修改完全没有必要,该如何取消修改,回到之前的状态(也就是修改之前的版本)呢?git status 同样提示了具体的撤消方法,接着上面的例子,现在未暂存区域看起来像这样:

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:   benchmarks.rb

在第二个括号中,我们看到了抛弃文件修改的命令(至少在 Git 1.6.1 以及更高版本中会这样提示,如果你还在用老版本,我们强烈建议你升级,以获取最佳的用户体验),让我们试试看:

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

可以看到,该文件已经恢复到修改前的版本。你可能已经意识到了,这条命令有些危险,所有对文件的修改都没有了,因为我们刚刚把之前版本的文件复制过来重写了此文件。所以在用这条命令前,请务必确定真的不再需要保留刚才的修改。如果只是想回退版本,同时保留刚才的修改以便将来继续工作,可以用下章介绍的 stashing 和分支来处理,应该会更好些。

记住,任何已经提交到 Git 的都可以被恢复。即便在已经删除的分支中的提交,或者用 --amend 重新改写的提交,都可以被恢复(关于数据恢复的内容见第九章)。所以,你可能失去的数据,仅限于没有提交过的,对 Git 来说它们就像从未存在过一样。

转载于:https://www.cnblogs.com/hdk1993/p/8862532.html


http://lihuaxi.xjx100.cn/news/273424.html

相关文章

浙江大学计算机科学与技术学院工业设计工程,浙江大学考研·2020年工业设计考研信息整理...

原标题&#xff1a;浙江大学考研2020年工业设计考研信息整理--声明&#xff1a;琢木设计考研原创整理&#xff0c;不得以任何形式转载--ps&#xff1a;每年招收名额会略微小的浮动浙江大学计算机学院&#xff1a;实行统一的学籍管理&#xff0c;且采用导师制 。学费为8000元/年…

特斯拉AI团队招兵买马:“英雄不问出处”

2月3日&#xff0c;特斯拉创始人兼CEO埃隆•马斯克发布推特&#xff0c;贴出了Autopilot AI团队招聘人才的信息。马斯克在推特中表示&#xff0c;特斯拉AI团队将直接向马斯克回报&#xff0c;他几乎每天都会与团队保持沟通和交流&#xff0c;并透露团队base在德州奥斯汀。据特斯…

为什么 IPv6 难以取代 IPv4

点击上方“方志朋”&#xff0c;选择“设为星标”回复”666“获取新整理的面试文章网络层协议承担了分组&#xff08;Packet&#xff09;转发和路由选择两大功能&#xff0c;它能够为上层提供在不同主机之间运输分组的职责&#xff0c;IP 协议作为网络层协议&#xff0c;它虽然…

网页解析:如何获得网页源码中嵌套的标签。

一&#xff1a;前言&#xff1a;网页源码中有很多嵌套的标签 例如div标签嵌套如&#xff1a;bUTP<DIV>finally<div>aurora</div>126.com</div><div class\"Cited1\">ggff</div> 我们的网页解析工作中有时候需要解嵌套。通俗的讲…

高精度地图量产难,四维图新利用优势准备实现突破

传统地图只需要做到米级精度即可实现GPS导航&#xff0c;但是高精地图需要达到厘米精度才能保证无人车行驶安全。 高精地图是无人驾驶的核心技术之一。对于L2-L3级别的自动驾驶汽车&#xff0c;高精地图不必然需要。但是对于高级别的无人驾驶汽车&#xff0c;精准的地图对无人…

经验 | 秋招总结(拼多多,腾讯,百度,字节)

点击上方“小白学视觉”&#xff0c;选择加"星标"或“置顶”重磅干货&#xff0c;第一时间送达本文转自|计算机视觉联盟 offer情况秋招运气好拿到了几个offer&#xff1a; 拼多多sp 腾讯sp 百度sp 字节(面完等offer中) 其他厂我基本都拒绝面试了&#xff0c;总体看秋…

“数学不好,干啥都不行!”骨灰级程序员:其实你们都是瞎努力

之前有很多程序员读者向我们抱怨&#xff1a;1&#xff09;做算法优化时&#xff0c;只能现搬书里的算法&#xff0c;遇到不一样的问题&#xff0c;就不会了。2&#xff09;面试一旦涉及到算法和数据结构&#xff0c;如果数学不行&#xff0c;面试基本就凉凉了。3&#xff09;一…

Spring Boot 2.3.0 新特性:优雅停机!

点击上方“方志朋”&#xff0c;选择“设为星标”回复”666“获取新整理的面试文章前言&#xff1a;关于Spring Boot、Spring Cloud应用的优雅停机&#xff0c;平时经常会被问到&#xff0c;这也是实际应用过程中&#xff0c;必须要掌握的点&#xff0c;这里简单总结下以前我们…