跳过正文

Git reset命令常见用法

·153 字·1 分钟
陌白
作者
陌白
一只热爱技术的码农
目录

Git撤回已push的提交
#

要撤回已经 push 到远程仓库的提交,同时保留这些更改,你可以使用以下步骤:

  1. 首先,使用 git reset 命令将本地仓库回退到指定的提交,但保留更改在工作区:
git reset --soft HEAD^

这个命令会撤销最近的一次提交,但所有更改会保留在你的工作目录中。如果你想回退多个提交,可以使用 HEAD~n,其中 n 是要回退的提交数量。

  1. 然后,将这些更改添加到暂存区并创建一个新的提交:
git add .
git commit -m "新的提交信息"
  1. 最后,强制推送到远程仓库:
git push --force
## 或 指定远程分支
git push origin <your-branch> --force

⚠️ 注意:使用 --force 选项时要非常小心,因为它会覆盖远程仓库的历史记录。如果是多人协作的项目,这可能会影响其他开发者。

如果你担心强制推送的风险,可以使用更安全的 --force-with-lease 选项:

git push --force-with-lease

这个选项会在远程分支被其他人更新的情况下拒绝推送,从而避免覆盖他人的工作。

如果你需要回退到特定的提交,可以使用提交的哈希值:

git reset <commit-hash>

Git Reset 参数解释
#

git reset 命令有几个不同的参数选项,它们决定了重置操作如何影响你的工作目录和暂存区。以下是主要参数的解释:

主要模式
#

--soft
#

git reset --soft <commit>
  • 将 HEAD 指针移动到指定的提交
  • 不改变暂存区(index)
  • 不改变工作目录
  • 所有更改会保留在暂存区中,准备好进行新的提交

这种模式适合当你想合并几个提交为一个新提交时使用

--mixed(默认模式)
#

git reset --mixed <commit>
## 或简写为
git reset <commit>
  • 将 HEAD 指针移动到指定的提交
  • 重置暂存区以匹配指定的提交
  • 不改变工作目录
  • 所有更改会保留在工作目录中,但需要重新 git add 才能提交

这是默认模式,适合当你想重新组织更改时使用。

--hard
#

git reset --hard <commit>
  • 将 HEAD 指针移动到指定的提交
  • 重置暂存区以匹配指定的提交
  • 重置工作目录以匹配指定的提交
  • 所有未提交的更改都会丢失

这种模式适合当你想完全放弃所有更改,回到指定提交的状态时使用。

其他常用参数
#

--merge
#

git reset --merge <commit>
  • 在合并冲突后重置,保留未冲突的更改

--keep
#

git reset --keep <commit>
  • 类似于 --hard,但如果工作目录中有未保存的更改且会被重置操作覆盖,则会中止操作

--patch-p
#

git reset -p
  • 交互式地选择要重置的部分

常见用法示例
#

  1. 撤销最近一次提交,但保留更改在暂存区:
git reset --soft HEAD^
  1. 撤销最近一次提交,并将更改移出暂存区:
git reset HEAD^
  1. 完全放弃最近的提交和所有更改:
git reset --hard HEAD^
  1. 回到特定提交,保留工作目录中的更改:
git reset <commit-hash>