开发工具: git 11、对本地刚做出的修改、暂存和提交进行撤回

本文详细介绍了如何使用Git的reset命令撤销工作区、暂存区及仓库的修改,包括git reset --soft、git reset 和 git reset --hard的不同用法,帮助读者理解如何在不同场景下撤回提交。

场景

如果你刚对工作区的代码进行了修改,或者将部分代码加入了暂存区,或者是提交了一个commit,此时你后悔了,那么如何反悔呢?

注意:本节操作全是对本地分支的撤回操作

回顾

工作区就是开发区,刚开始工作区中会有一些文件,然后执行 git add 命令可以将工作区中的文件加入到暂存区中。接着执行 git commit 命令,可以将暂存区中的文件一次性提交到 git 仓库中,同时创建一个 commit object 指向一个 tree object,tree object 指向那些文件对应的 blob object。然后 master 指针会指向那个 commit object,HEAD 指针指向 master

对文件进行修改后,会让一个文件变成第二个版本,然后再次 git addgit commit,此时暂存里的文件会变成第二个版本,同时也会提交到仓库里创建一个新的 commit object,新的 commit object 会引用上一个 commit object。循环如此。

reset 撤回

假设工作区、暂存区和仓库中目前有3个版本

git reset --soft HEAD^

该命令的作用如下:

  • 在仓库中,将master分支指向上一个 commit
  • 暂存区和工作区还是停留在第三个版本

也就是说该命令相当于是撤回了 git commit 操作。

因为 git commit 操作就是将暂存区中的第三个版本放入仓库,同时创建一个新的 commit object 指向第三个版本,master 指针也指向最新的 commit object。

比如提交一次 commit
72
此时后悔了,使用 git reset --soft head^ 来撤回此次的提交
73
可以发现此时工作区的代码并没有被撤销
74
暂存区的内容也没有发生变化。

git reset HEAD^

该命令的作用如下:

  • 将 master 指针指向上一个 commit
  • 将 master 指针指向的 commit 对应的版本恢复到暂存区中

这个命令,相当于是撤回了 git commitgit add 操作

再执行一次 commit
72
执行 git reset head^
75
可以发现此时工作区的内容没有被还原,但是暂存区的文件被还原了。查看日志发现最近一次的commit也被撤销了
76

git reset --hard HEAD^

该命令的作用如下:

  • 将 master 指针指向上一个 commit
  • 暂存区里的内容变成上一个 commit 的版本,同时将上一个 commit 的内容恢复到工作区

这个命令彻底撤回了上次的 git commitgit add 操作,相当于是回退了到历史上的某一个版本
77
执行命令
78

修改了工作区中的内容,同时放入了暂存区,但是还没提交

git reset head

如果希望将暂存区里加入进去的内容撤销掉,然后在工作区里面重新修改代码。可以使用该命令
82
83

git reset --hard HEAD

将暂存区和工作区里面的内容一次性抹掉
82
84

修改了工作区中的内容放入了暂存区且提交了

比如说本来今天的代码你都提交了,但是你的leader说,这块代码不要了,此时怎么办呢?

回退版本,直接回退到没做任何代码修改的那个版本即可。

# 回退上一个版本
git reset --hard head^

# 回退到指定版本
#git reset --hard commit标识符
git reset --hard 9654657
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值