敞开成长之旅!这是我参加「日新计划 12 月更文挑战」的第35天,点击检查活动详情
懊悔药-怎样吊销改变?
发现写错了要回退怎样办?看看下面几种懊悔指令吧!
- ❓还没提交的怎样吊销? ——
checkout、reset- 还未提交的修正(作业区、暂存区)不想要了,用签出指令(checkout)进行吊销铲除。
- 或许用
checkout的新版回滚指令reset。
- ❓已提交但么有push的提交怎么吊销?——
reset、revert - ❓已push的提交怎么吊销?—— 同上,先本地吊销,然后强制推送
git push origin -f,⚠️留意慎用! 记住先pull获取更新。
懊悔指令
| 指令 | 描述 |
|---|---|
| git checkout . | 吊销作业区的(未暂存)修正,把暂存区康复到作业区。不影响暂存区,假如没暂存,则吊销一切作业区修正 |
| git checkout [file] | 同上,file指定文件 |
| git checkout HEAD . | 吊销作业区、暂存区的修正,用HEAD指向的当时分支最新版别替换作业区、暂存区 |
| git checkout HEAD [file] | 同上,file指定文件 |
| git reset | 吊销暂存区状况,同git reset HEAD,不影响作业区 |
| git reset HEAD [file] | 同上,指定文件file,HEAD可省掉 |
| git reset [commit] | 回退到指定版别,清空暂存区,不影响作业区。作业区需要手动git checkout签出 |
| git reset –soft [commit] | 移动分支master、HEAD到指定的版别,不影响暂存区、作业区,需手动git checkout签出更新 |
| git reset –hard HEAD | 吊销作业区、暂存区的修正,用当时最新版 |
| git reset –hard HEAD~ | 回退到上一个版别,并重置作业区、暂存区内容。 |
| git reset –hard [commit] | 回退到指定版别,并重置作业区、暂存区内容。 |
| git revert[commit] | 吊销一个提交,会用一个新的提交(原提交的逆向操作)来完结吊销操作,假如已push则从头push即可 |
-
git checkout .、git checkout [file]会铲除作业区中未添加到暂存区的修正,用暂存区内容替换作业区。 -
git checkout HEAD .、git checkout HEAD [file]会铲除作业区、暂存区的修正,用HEAD指向的当时分支最新版别替换暂存区、作业区。
# 只吊销作业区的修正(未暂存)
$ git checkout .
Updated 1 path from the index
# 吊销作业区、暂存区的修正
$ git checkout HEAD .
Updated 1 path from f951a96
回退版别reset
reset是专门用来吊销修正、回退版别的指令,支撑的场景比较多,多种吊销姿势,所以参数组合也比较多。简略理解便是移动master分支、HEAD的“指针”地址,理解这一点就根本把握reset了。
如下图:
- 回退版别
git reset --hard v4或git reset --hard HEAD~2,master、HEAD会指向v4提交,v5、v6就被废弃了。 - 也可以从头康复到
v6版别:git reset --hard v6,便是移动master、HEAD的“指针”地址。
reset有三种形式,对应三种参数:mixed(默许形式)、soft、hard。三种参数的主要差异便是对作业区、暂存区的操作不同。
-
mixed为默许形式,参数可以省掉。 - 只有
hard形式会重置作业区、暂存区,一般用这个形式会多一点。
| 形式名称\ | 描述 | HEAD的位置 | 暂存区 | 作业区 |
|---|---|---|---|---|
| soft | 回退到某一个版别,作业区不变,需手动git checkout
|
修正 | 不修正 | 不修正 |
| mixed(默许) | 吊销暂存区状况,不影响作业区,需手动git checkout
|
修正 | 修正 | 不修正 |
| hard | 重置未提交修正(作业区、暂存区) | 修正 | 修正 | 修正 |
络绎前,用git log可以检查提交前史,以便确认要回退到哪个版别。要重返未来,用git reflog检查指令前史,以便确认要回到未来的哪个版别。
git reset [--soft | --mixed | --hard] [HEAD]
# 吊销暂存区
$ git reset
Unstaged changes after reset:
M R.md
# 吊销作业区、暂存区修正
$ git reset --hard HEAD
# 回退版别库到上一个版别,并重置作业区、暂存
$ git reset --hard HEAD~
# 回到原来的版别(康复上一步的吊销操作),并重置作业区、暂存
$ git reset --hard 5f8b961
# 检查一切前史提交记载
$ git reflog
ccb9937 (HEAD -> main, origin/main, origin/HEAD) HEAD@{0}: commit: 报表新增导入功能
8f61a60 HEAD@{1}: commit: bug:修复报表导出bug
4869ff7 HEAD@{2}: commit: 用户报表模块开发
4b1028c HEAD@{3}: commit: 财务报表模块开发完结
吊销提交revert
安全的吊销某一个提交记载,根本原理便是出产一个新的提交,用原提交的逆向操作来完结吊销操作。留意,这不同于reset,reset是回退版别,revert只是用于吊销某一次前史提交,操作是比较安全的。
如上图:
- 想吊销
v4的修正,履行git revert v4,会发生一个新的提交v-4,是v4的逆向操作。 - 一起更新
maser、HEAD“指针”位置,以及作业区内容。 - 假如已
push则从头push即可。
# revert吊销指定的提交,“-m”附加说明
$ git revert 41ea42 -m'吊销对***的修正'
[main 967560f] Revert "123"
1 file changed, 1 deletion(-)
checkout/reset/revert总结
| 标题 \ 指令 | checkout | reset | revert |
|---|---|---|---|
| 主要作用(吊销) | 吊销作业区、暂存区未提交修正 | 回退版别,重置作业区、暂存区 | 吊销某一次提交 |
| 吊销作业区 | git checkout [file] | git reset HEAD [file] | |
| 吊销作业区、暂存区 | git checkout HEAD [file] | git reset –hard HEAD [file] | |
| 回退版别 | git reset –hard [commit] | ||
| 安全性 | 只针对未提交修正,安全 | 如回退了已push提交,不安全
|
安全 |
可看出reset完全可以代替checkout来履行吊销、回退操作,reset原本也是专门用来干这个工作的,可以扔掉checkout了(吊销的时分)。
参考资料
- 博客园 | 浅显易懂Git教程
- 山公都能懂的GIT入门
- 廖雪峰的GIT教程
- 电子书《ProGit-Git教程》
- Gitee码云的 Git 大全,真的挺全
- 灵敏进程实践-git代码分支办理规范
- 易百教程-Git教程?
- 在线Git学习+练习
- GUI Clients Git网站上的GUI工具列表
- Git常用指令调集
️版权声明:版权一切@安木夕,本文内容仅供学习,欢迎指正、交流,转载请注明出处!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。




