回滚
1.强制推送
场景:
t1: 修改文件'小白兔,白又白',并提交,提交名字为t1
t2: 修改文件‘两只耳朵竖起来',并提交,提交名字为t2
需求:
我想回滚到t1提交后的时候(也就是'小白兔,白又白'更改后并推送后的文件状态)
步骤:
git log 查看想要回退的提交的哈希值
git reset --hard <commit-hash> 回退到目标提交(这里用t1的hash)
git push --force origin <branch-name> 由于你更改了本地分支的历史记录,你需要使用 git push --force 来强制将更改推送到远端。这将覆盖远端分支的历史记录。注意:<branch-name> 是你正在工作的分支的名称。
//全部执行后,t2的记录没有了
场景:
a1: 修改文件'爱吃萝卜和青菜',并提交,提交名字为a1
a2: 修改文件‘蹦蹦跳跳真可爱',并提交,提交名字为a2
a3: 修改文件'小白兔结束了',并提交,提及名字为a3
需求:
我想回滚到a2未提交的时候,并且保留a2的状态,将'蹦蹦跳跳真可爱'改成'不蹦不跳真可爱'
步骤:
git reset --mixed <commit-hash> 回退到目标提交(这里用t2的hash)
git push --force origin <branch-name>
//执行后,a3的记录没有了
使用 git reset
命令来回退到那个提交。你有几个选项:
--soft
:保留工作目录和暂存区的更改,只将 HEAD 指向目标提交。--mixed
(默认):保留工作目录的更改,但清空暂存区,将 HEAD 指向目标提交。--hard
:丢弃所有未提交的更改,将工作目录和暂存区都重置为目标提交的状态。
弊端:
- 强制推送会覆盖远端分支的历史记录(),这可能会导致其他协作者的工作丢失或产生合并冲突。
- 在执行此操作之前,确保你了解后果,并已通知所有可能受影响的协作者。
- 如果你只是想撤销最近的几次提交,但保留这些更改在暂存区或工作目录中,你可以考虑使用
git revert
来创建一个新的提交来撤销之前的更改,而不是直接修改历史记录。