Git:如何撤销已经提交的代码
⽇常操作流程
本地⼯作区(尚未暂存) ---> add . 到暂存区 ---> commit 到本地仓库 ---> pull拉取关联远程仓库分⽀合并到本地的分⽀---> push 到远程分⽀
查看commit提交的内容
git log #查看commitId的log
git show #查看最新的commit
git show commitId #查看指定commit c440aa10ac的所有修改:
场景⼀:
修改的⽂件已被git commit,再次修改的⽂件,合并到上⼀次提交的commit中,不再产⽣新的Commit
# 修改最后⼀次提交
git #修改⽂件添加到暂存区
git commit --amend -m"说明" #合并提交到上⼀次的commit⾥
git commit --amend  #或者进⼊到编辑⾥编写提交注释
修改上⼀次commit提交的备注
git commit --amend
场景⼆:
当修改⽂件后,还没有add提交到暂存区,也没有commit时,想要放弃修改
git #放弃11.txt⽂件的修改
git checkout .  # 放弃所有⽂件的修改
git checkout – . 丢弃全部,也包括:新增的⽂件会被删除、删除的⽂件会恢复回来、修改的⽂件会回去。这⼏个前提都说的是,回到暂存区之前的样⼦。对之前保存
在暂存区⾥的代码不会有任何影响。对commit提交到本地分⽀的代码就更没影响了。当然,如果你之前压根都没有暂存或commit,那就是回到你上次pull下来的样⼦
了。
场景三:
当⽂件add提交到暂存区,还没有commit时,发现⽂件提交错了,这时想撤回⽂件
git reset HEAD a.php #只撤消a.php
git reset HEAD * #撤消所有
这个命令仅改变暂存区,并不改变⼯作区,这意味着在⽆任何其他操作的情况下,⼯作区中的实际⽂件同该命令运⾏之前⽆任何变化
场景四:
当⽂件add提交到暂存区,也commit了,发现⽂件提交错了,这时想撤回⽂件
git reset HEAD^ # 撤消上⼀次的commit 不带参数默认是--mixed 例:git reset --mixed HEAD^  也可以写成git reset HEAD~1
git reset HEAD~2 如果你进⾏了2次commit,想都撤回,可以使⽤HEAD~2
git reset fdaeaf208f0e142ceba5766d17786d60fcebc1dd #撤消指定的commitId
git reset --hard fdaeaf208f0e1 # 回退到指定版本放弃⼯作区的所有修改,还原到指定版本的代码
reset三种模式区别
--soft:不删除⼯作空间改动代码,撤销commit,不撤销git add .操作,重置位置的同时,保留working Tree⼯作⽬录和index暂存区的内容,只让repository中的内容和 reset ⽬标节点保持⼀致,因此原节点和reset节点之间的【差异变更集】会放⼊    --mixed(默认):不删除⼯作空间改动代码,撤销commit,并且撤销git add . 操作,重置位置的同时,只保留Working Tree⼯作⽬录的內容,但会将 Index暂存区和 Repository 中的內容更改和reset⽬标节点⼀致,因此原节点和Reset节点之间的    --hard:删除⼯作空间改动代码,撤销commit,撤销git add . 操作,重置位置的同时,直接将 working Tree⼯作⽬录、 index 暂存区及 repository 都重置成⽬标Reset节点的內容,所以效果看起来等同于清空暂存区和⼯作区。
注意完成这个操作后,就恢复到了指定版本的commit状态。
push到远程仓库
如果代码之前已经push到远程仓库⾥,想要撤消线上的push
步骤:先回退本地版本,再强推到远程仓库⾥,有两种⽅法
⽅法:repository文件夹可以删除吗
1. reset(回滚到)
2. revert(重做)
区别:
reset是指将HEAD指针指到先前已存在的历史提交,历史记录中不会出现放弃的提交记录。
revert是放弃指定提交的修改,但是会⽣成⼀次新的提交,需要填写提交注释,以前的历史记录都在;
reset(回滚到)
git reset --hard fdaeaf208f0e1 # 回退到指定版本放弃⼯作区的所有修改,还原到指定版本的代码
git push ⽬标分⽀本地分⽀ -f
此时如果⽤“git push”会报错,因为我们本地库HEAD指向的版本⽐远程库的要旧,要加-f参数强制推送
#git push ⽬标分⽀本地分⽀ -f
git push origin master -f
revert(重做)
或者在IDEA中操作:
选soft 或者 mixed 都可以,这个你本地开发的代码不会丢失。
查看代码已经撤回了
4.git push 重新提交会报错;
把撤回的状态推送到线上仓库⾥,因为此时只是在本地撤回代码了,还没有同步到线上
这是因为撤回后,本地仓库⾥的版本⼩到线上仓库的,所以被拒绝
下⾯强推⼀下就可以了
git push origin master -f
5.使⽤git push --force
执⾏完上⾯的命令后,线上仓库⾥的提交就被撤回了。
然后,⾃⼰在本地再修改代码,测试好了,再重提交代码add .
add commit -m"edit code"
add pull
add push

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。