Git-撤销/回滚操作

git结构和各操作之间的关系

git分层
WorkDir进行add操作将当前修改同步到 Index,执行commit操作同步到Head,执行push上传到Server。

撤销add操作

撤销add
git reset [HEAD/commitid] 使用HEAD或者commitid覆盖Index,不影响Head和WorkDir,如果是在commit之后执行这个操作相当于同时撤销了commit和add操作
git reset [HEAD/commitid] – file 针对某个文件使用HEAD或者commitid覆盖Index,不影响Head和WorkDir

撤销commit操作

撤销commit
git reset –soft HEAD^ 重置HEAD到上一版本,即撤销commit操作,不影响index和workdir。
git reset –soft HEAD^1 ^后面的数字表示恢复到哪个父提交的版本,一个提交可能会对应多个父提交,用于指定回到哪个
git reset –soft commitid 后面添加comiit_id指明回退到哪个版本

撤销commit和add

撤销commit和add
git reset –mixed HEAD^ 效果同git reset HEAD^
git reset –mixed HEAD^1 ^后面的数字表示恢复到哪个父提交的版本,一个提交可能会对应多个父提交,用于指定回到哪个

撤销commit、add操作,并将本地版本也重置为上一版本

撤销commit、add并重置本地
git reset –hard HEAD^ 重置head到上一版本,会覆盖index, –hard会使head、index、workdir都重置回之前的版本,远程服务器上不会变,如果希望远程服务器上也回到上一版本的话,就使用一下git push –force。
git reset –hard HEAD^1 ^后面的数字表示恢复到哪个父提交的版本,一个提交可能会对应多个父提交,用于指定回到哪个
git reset –hard commitid 用commit_id指定回到哪次 commit

git revert

git revert commitid 使用某一次提交覆盖当前,已达到恢复到某次的效果。revert之后执行一次git push同步到server。

git reset 和 git revert 的区别

git reset 简单暴力的将版本置回到某个版本,现在有过a、b、c、d四次提交,提交顺序为a、b、c、d,现在为d。使用git reset恢复到a之后,看git log,就只剩下a了,b、c、d都不见了。使用git revert恢复到a之后,看git log,会发现a、b、c、d都在,多了e操作,e操作为“revert a”。
原始log:
原始log
执行过git reset之后:
reset之后
可以看到commitid为7f****的log记录已经没有了

再来看一下revert:
revert
解决完冲突,revert之后:
revert之后
可以看到这里多了一条“Revert ‘commit add’”的记录。

### Git Reset 命令不同模式解析 #### 背景介绍 `git reset` 是 Git 中用于撤销的强大命令,支持 `soft`, `mixed`(默认), 和 `hard` 三种主要操作模式。每种模式针对不同的需求有不同的行为。 #### Soft 模式 当执行 `git reset --soft HEAD~1` 后,仅会变当前分支的最新提交记录指向的位置,而不会影响暂存区和工作目录中的文件状态。这意味着之前最后一次提交的所有动仍然会被保留并处于已暂存的状态,可以继续编辑或再次提交这些修[^1]。 ```bash # 将HEAD指针向前移动一个提交但保持其他不变 git reset --soft HEAD~1 ``` #### Mixed 模式 这是 `git reset` 默认的行为方式,在这种情况下不仅变了最新的提交记录位置,还会清除已经加入到索引/暂存区域内的变更信息;不过实际的工作副本里的文件内容依旧维持原样未被更动过。因此用户可以在不丢失任何代码的情况下重新考虑哪些变化应该被纳入下一次提交之中[^2]。 ```bash # 移动HEAD指针同时取消最近的一次提交所作的暂存动作 git reset --mixed HEAD~1 ``` #### Hard 模式 采用 `--hard` 参数时,则不仅仅是调整了提交历史链上的游标位置那么简单——它还将同步更新索引以及工作树至指定的历史快照版本,并且覆盖掉本地尚未跟踪的新文件与修过的旧文件。这实际上相当于完全恢复到了某特定时间点之前的项目状况,所有后续做的变动都将消失不见。由于其破坏性的特性,所以在日常开发过程中应当谨慎运用该选项[^4]。 ```bash # 彻底回滚到最后一个提交前的状态,包括丢弃工作目录中的所有更 git reset --hard HEAD~1 ``` #### 使用场景总结 - **Soft**: 当只需要撤消上一步提交的动作而不打算放弃任何现有更的时候适用; - **Mixed (Default)**: 对于那些想要移除某些已被标记为准备提交却还未真正推送出去的变化而言非常适合; - **Hard**: 主要用在确实需要抛弃一切未经保存的数据回到过去某一刻的情形之下,比如误操作后的紧急修复等场合[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值