(四)提交退回

113 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第4天,点击查看活动详情

git reset 命令用于将当前HEAD复位到指定状态。简单来说就是,回退你已提交的 commit,并将 commit 的修改内容放回到暂存区。

一般我们在使用 reset 命令时,git reset --hard 会被提及的比较多,它能让 commit 记录强制回溯到某一个节点。而 git reset --soft 的作用正如其名,--soft (柔软的) 除了回溯节点外,还会保留节点的修改内容。

应用场景

  1. 提交信息不小心写了个错别字
  2. 将不属于本次提交范畴内的文件提交了

命令使用

现在我们要退回最近一次的提交: 使用命令:

git reset --soft HEAD^
# or
git reset --soft <commitID>

使用git reset --soft 后,将回到你点击确定提交前的状态,此时你更改的代码会留在暂存区,提交信息也会存在,只等你再次按下提交按钮。

以上说的是还未 push 的commit。对于已经 push 的 commit,也可以使用该命令,不过再次 push 时,由于远程分支和本地分支有差异,需要强制推送 git push -f 来覆盖被 reset 的 commit。

还有一点需要注意,在 reset --soft 指定 commit 号时,会将该 commit 到最近一次 commit 的所有修改内容全部恢复,而不是只针对该 commit。该操作导致的问题就是你需要重新编写这几次的提交信息。

使用命令查看进三次的提交:

git log --pretty=online -3

--pretty=online 会美化输出的提交信息,-3 输出最近的三条提交记录,是 -n 3参数的简写。 如下图:

image.png

现在将提交信息为 a 的提交退回。复制出 commit ID进行回退:

git reset --soft 225772480c8658837199ccadd7bd0cff787cebc0

此时HEAD指向了a,b,c 回到了暂存区,

image.png