一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第 2 天,点击查看活动详情。
前言
Git 将整个版本控制的流程划分为 3 个区域
- 工作区(working directory):日常对文件的修改,会立即影响到工作区中内容
- 暂存区(stage):只有
git add命令执行后的文件,才会到暂存区中保存 - 版本库(repository):只有
git commit命令执行后的文件,才会保存到版本库中
在命令行模式下,通过git status命令,可以明显区分工作区与暂存区中的文件。其中,工作区中的文件以红色标识,暂存区中的文件以* *绿色**标识。
1. 版本库不同版本之间的回滚操作
先添加三个版本的内容
# 第一个版本无法直接使用 git commit -am ""
git add App.txt
git commit -m "feat:第一版本"
# 第二个版本
git commit -am "feat:第二版本"
# 第三个版本
git commit -am "feat:第三版本"
通过命令查看分支的记录git log --graph
真实场景
- 新上线的功能出现了生产环境的故障,第一时间应该回滚版本。对于代码而言,可以回滚版本,重新打包
通过命令git reflog查看提交记录
# 回滚到指定版本需要,指定提交记录的 ID(不需要写全,能标识出唯一即可)
git reset --hard c1cee7b
#版本记录中没有之前的第三个版本了
git log --graph
如果还想回到之前的「第三版本」,则需要找到第三版本的 commit ID,通过git log显然是无法找到,因为它展示的版本库的记录。需要通过git reflog查看关于版本操作的所有记录,包括刚刚的版本的回滚操作,也会在其中显示
在git reflog中找到之前版本的记录,再重新git reset --hard 512a374即可回到第三版本,同时这个操作会被记录下来
2. 工作区-暂存区-版本库三者之间的回滚操作
工作区的回滚
在 Working Directory 中对文件进行修改,此时想要取消所有的修改,只需要根据git status命令的提示,将工作区中的修改放弃即可。
- 根据提示,
git restore <file>可将所有的文件修改放弃 git add <file>将文件提交到暂存区
暂存区回滚到工作区
Store 中修改,来自于工作区的提交git add <file>,在git status的提示下
git restore --staged <file>可将暂存区的文件,重新打回到工作区
版本库同步到暂存区、工作区
如果开发到一半,发现暂存区的内容与工作区的内容都不想要了,需要以最新的版本库内容为准,则需要将暂存区和工作区的修改全部放弃
# --source 指定版本库的 ID(HEAD 表示当前最新的版本,也可以指定其他版本)
# --staged 暂存区文件
# --worktree 工作区文件
git restore --source=HEAD --staged --worktree <file>
3. 文件的删除
Git 记录的是对文件的修改,因此文件的删除,其实也被看到是一种修改。删除的操作,在 Git 中的操作与普通修改是一致的,只不过 Git 额外提供了一个 git rm <file>命令来将当前删除文件提交到暂存区,当然使用git add <file>也可以提交删除文件