git reset 命令
git reset 命令用于回退版本,可以退回指定的某一次提交的版本。
1. git reset 命令的语法
git reset [--soft | --mixed | --hard] [commit]
其中 [commit] 为提交点。
2. git HEAD 提交点
学习 git reset 命令之前,首先需要了解一个概念 HEAD。
HEAD 是本地版本库中当前分支引用的指针,它总是指向该分支上的最后一次提交。
用 HEAD 表示的提交点 commit:
- HEAD 表示当前版本
- HEAD^ 上一个版本
- HEAD^^ 上上一个版本
- ...
可以使用 ~数字表示。
- HEAD~0 表示当前版本
- HEAD~1 上一个版本
- HEAD^2 上上一个版本
- ...
3. git reset --mixed 命令
git reset –mixed 移动 HEAD 到指定的 commit,同时重置暂存区为指定 commit 的状态(将内容从 HEAD 复制到暂存区中),但保留原先的工作目录,同时将添加暂存区的修改撤销到工作目录中。
git reset --mixed 有 取消暂存文件 的效果。实际上它与 git add 所做的操作相反,可以用该命令撤销 add 到暂存区的修改到工作区。
其中 --mixed 为默认,可以不用带该参数,也就是 git reset --mixed 等价于 git reset。
例如:
# 回退所有内容到上一个版本 $ git reset HEAD^ # 回退 hello.php 文件的版本到上一个版本 $ git reset HEAD^ hello.php # 回退到指定版本 $ git reset 052e
4. git reset --soft 命令
git reset –soft 只移动 HEAD 到指定的 commit,但保留原先暂存区和工作目录的内容,同时会将指定 commit 之后提交的内容设置到暂存区中。
git reset --soft
5. git reset --hard 命令
移动 HEAD 到指定的 commit,同时重置暂存区和工作目录到指定 commit。
这三个参数中,只有 soft 和 mixed 是安全的,hard 会令工作丢失,使用时应该小心。
下一章:git cherry-pick 命令
git cherry-pick 命令用于将指定的提交(commit)应用于其他分支。对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 git cherry-pick。