使用git之前,首先要搞清楚下面几个概念:
- 工作区(本地项目,不包含.git目录)
- 本地仓库(版本库,.git目录)
- 暂存区(index)
- 远程仓库
常用撤销命令:
- 撤销修改:类似于使用vs code中的
放弃更改
git checkout fileName // 撤销某一文件修改
git checkout . // 撤销所有文件修改
- 撤销add:类似于使用vs code中的
取消暂存更改
git reset HEAD fileName // 撤销add操作的某个文件
git reset HEAD . // 撤销本地所有add操作
- 撤销commit:
git add fileName
git commit --ament -m “说明”
// 修改commit后的文件,再 git commit--ament -m “xxx” 提交,用于文件commit后仍想修改说明,但不产生新的commit的情况
git reset --hard HEAD^
// 回退到上一个commit后的版本,前提是没有推送到远程库
HEAD表示当前版本
HEAD^表示上一个版本
HEAD^^表示上上一个版本
以此类推……
HEAD~10表示回退到上10个版本
git reset [--hard|soft|mixed|merge|keep] 版本号
// 根据commit版本号回退到某一提交版本
mixed:不删除工作空间改动代码,撤销commit和add(默认)
soft:不删除工作空间改动代码,撤销commit,不撤销add
hard:删除工作空间改动代码,撤销commit,撤销git add
git revert -n 目标版本号
// 撤销目标版本号所做的修改,但不改变该版本之后提交的版本
- 回滚push:
// 先在本地回退到相应的版本
git reset --hard commitId // 回退到指定版本
// 再强制推到远程库
git push origin <分支名> --force
// 此时,远程库也就回到了相应的版本
// 危害:可能会覆盖远程库中别人的代码!!!
// revert反做:撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程
git revert -n 版本号
// 然后对需要提交的内容重新add、commit、push推到远程库
注:reset是撤销到某次提交,revert是重做某次提交
个人认为下面的图描述的比较清晰(侵删)
命令及概念关系