在 Git 中,撤销修改可以通过多种方式实现,具体取决于你想撤销的修改类型(未提交的修改、已提交的修改、合并等)。以下是一些常用的撤销修改的指令:
撤销未提交的修改
撤销工作区的所有修改:
git checkout -- <file>
这个命令会撤销工作区中指定文件的所有未提交修改,恢复到最近一次提交的状态。如果要撤销所有文件的修改,可以使用:
git checkout -- .
Git 撤销暂存区git add 之后:
Git reset .
Git reset HEAD .
Git 撤销commit后:
1. git reset HEAD~
- 行为:
git reset HEAD~
实际上是git reset --mixed HEAD~
的简写形式(在不指定具体模式时,默认为--mixed
)。这个命令会将当前分支的 HEAD 指针回退到上一个提交(即HEAD~
),并且会撤销上一次提交所做的所有更改,但这些更改会保留在工作目录中,暂存区(staging area)会被清空。 - 效果:工作目录中的文件会包含上一次提交之后的所有更改,但这些更改现在是未暂存的(unstaged)。你需要使用
git add
命令重新将它们添加到暂存区,然后使用git commit
命令重新提交。 - 用途:当你想要撤销最近的一次提交,但保留那些更改以便稍后重新提交时,这个命令非常有用。
2. git reset --soft HEAD^
- 行为:
git reset --soft HEAD^
命令会将当前分支的 HEAD 指针回退到上一个提交(即HEAD^
),但与--mixed
或--hard
选项不同,--soft
选项会保留工作目录和暂存区中的所有更改。换句话说,它只改变 HEAD 指针的位置,而不影响工作目录或暂存区的状态。 - 效果:工作目录和暂存区中的文件保持不变,就像没有执行任何撤销操作一样。但是,由于 HEAD 指针已经回退,Git 会认为自上一个提交以来的所有更改都是新的、尚未提交的更改。
- 用途:当你想要撤销最近的一次提交,但想要将这些更改作为下一次提交的一部分时(例如,当你想要合并多个提交为一个时),这个命令非常有用。
git push之后撤销:
main主分支不能回滚,其他分支可以:
git push -f
Total 0 (delta 0), reused 0 (delta 0)
remote: GitLab: You are not allowed to force push code to a protected branch on this project.
To gitlab.test.git
! [remote rejected] main -> main (pre-receive hook declined)
error: failed to push some refs to 'gittest.git'
git log
git reset --hard b44c6f4
git push origin test:test -f
https://blog.youkuaiyun.com/weixin_42988712/article/details/127450683
https://blog.youkuaiyun.com/m0_64564920/article/details/124410678