git reset 命令

Git 基本操作Git 基本操作

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 可以用于压缩最近的提交,用该命令将 HEAD 移动到一个旧一点的提交上,然后再 commit 就可以将多个最近的提交压缩为一个。

5. git reset --hard 命令

移动 HEAD 到指定的 commit,同时重置暂存区和工作目录到指定 commit。

这三个参数中,只有 soft 和 mixed 是安全的,hard 会令工作丢失,使用时应该小心。

Git 基本操作Git 基本操作

下一章:git cherry-pick 命令

git cherry-pick 命令用于将指定的提交(commit)应用于其他分支。对于多分支的代码库,将代码从一个分支转移到另一个分支是常见需求。这时分两种情况。一种情况是,你需要另一个分支的所有代码变动,那么就采用合并(git merge)。另一种情况是,你只需要部分代码变动(某几个提交),这时可以采用 git cherry-pick。