上篇介绍 git checkout 是还原档案内容,那麽 git reset 的功能是什麽呢?
指令功能:还原「档案状态」
使用 git reset 指令之前,要先了解 reset 的意思。从英文翻译来看 reset 代表的是重新设定,但其实在中文解释里「前往」、「变成」,会较符合该指令的用途,所以注意别被误导罗!
👉 reset → go to / become
git reset
的基本观念:
📖 常用情况:将已预存的档案移出预存区
情境|假设今天修改两份档案,想要分别提交它们,却不小心,却不小心使用 git add *
将两者都加至暂存区。如果想要把其中一个档案移出预存区(unstage),我们可以怎麽做呢?
🛠 实际操作
分别新增两个档案,内容自由编辑
$ touch index1.html # 新增 index1.html 档案
$ touch index2.html # 新增 index2.html 档案
此时我误用了 git add *
指令将两个档案都上传,并查看状态
$ git add * # 将所有档案全部加至暂存区 ( * 代表全部)
$ git status # 检查档案状态
档案状态显示:Changes to be committed(new file)
可以看到两个档案都被加至暂存区,但这跟我本来想要分别 Commit 的预设不同,所以希望可以将其中一个移除暂存区。
红色底线的文字讯息:use "git reset HEAD ..." to unstage
便是提示说使用 "git reset HEAD ..." 将档案放回 unstage 。
输入 git reset
指令,并查看状态。
$ git reset HEAD index2.html # 还原 index2.html 档案状态(使档案回到前一个状态)
// git reset HEAD + [档案名称]
现在暂存区里只有 index1.html 档案,而 index2.html 的档案状态则变成未追踪(Untracked files)的状态。
将档案提交至储存区 git commit -m
只有 index1.html 档案被提交啦!达到原本想做的效果了~
首先「绝对路径」,是指你很清楚你要还原哪一个版本,知道 Commit 编号,那麽可以直接指定要还原那个版本档案。
$ git reset [Commit 的 SHA-1 编号] # 还原指定的 Commit
相对路径|
首先先使用 git log --online
指令来检视目前的 Git 纪录。
$ git log --online # 检视 Git 纪录(简单一行形式)
上图部分可以看到我们目前有三个 Commit 版本,而 HEAD 与 master 都刚好同时指向
3f2ed7a
这个版本。
假设今天想要还原到 a8bf179
这个版本,那麽有以下几种方式,都是以「相对路径」的概念进行。
^
符号代表「前一次」的意思。
因此 3f2ed7a^ 代表 3f2ed7a 的前一个。而因为 master 与 HEAD 也都刚好指向 3f2ed7a ,所以我们也可以使用 master 或 HEAD 来进行相对路径的方式指定还原到哪个版本。
git reset HEAD <file>
根据 HEAD ( 最後提交的 patch ) 来还原 file 的「档案状态」。
参考文章:档案还原
⚠️ 只会还原「档案状态」,而不是还原档案的「内容」
file 是用来指定还原某档案,如没有指定何者档案,则会默认为还原所有档案。
$ git reset HEAD <file> # 还原「指定」的档案状态
$ git reset HEAD # 还原「全部」的档案状态
git reset
会改变档案的档案状态,使用时机用於想要更改 master 或是暂存区的资料。但这里要特别注意的是,如果对於 git reset 指令还不够熟悉,最好别随便使用,一旦 master 被移动,很容易很容易找不到原来的档案。
建议使用时机:
git add
加到不想要的档案,想从暂存区移除掉总结 |可以清除过去的纪录,负责移动 HEAD 和 master 的指令。
人工智慧9 前言 系列文章简介 大家好,我们是 AI . FREE Team - 人工智慧自由团队,...
建立一个 telegram bot 打开 telegram 搜寻 BotFather 然後装好ngr...
该文章同步发布於:我的部落格 昨天我们做了一个关於汉堡种类的测试,但真正的测试怎麽可能这麽少呢! ...
搞定 Mac 的软件和终端机,接下来要学习一步步把其他工具的使用环境建立起来,并学习如何去运用。 1...
前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...