Skip to content

git reset

git reset 是代码书写过程中的后悔药, 它可以重置当前目录,并且选择是否保留修改, 也可以修改已提交的message, 同时修改指针 HEAD

  • git reset commit-id

    回退到指定 commit-id, 同时保留之前的内容到缓存区

注意: 指针回退到 commit-id, 但是缓存区的代码不包含 commit-id 的提交

uml diagram

假设有上图时间线的 commit 提交, 如果执行 git reset c2, 则发生的变化是

  1. 头部指针指到 c2
  2. c3-cN 提交的代码进入缓存区
  3. c3-cN 提交的 message 消失
  • git reset .

将代码从 staged/cached 区移动到编辑区, 不改动文件代码

  • git reset --hard commit-id

    回退到 commit-id, 不保存之前的所有记录和代码

这个操作比较危险, 适用于

  1. 清空提交
  2. 丢掉无用的代码
  3. 回退到某个 commit-id 进行测试操作, 回退之前确保已经 push 到远端,可以随时 pull 回来