Git提交失误场景(二)

一、前言

经常有些操作失误,但又不小心上传或者提交到git仓库,这时候如何解决这种尴尬的局面?

二、业务场景

1、提交但没上传

不小心将不想要的代码commit到本地仓库,但还没有做push操作!

2、上传到远程仓,回到上次的提交

尴尬了,刚上线发现上传的代码出现了问题,需要还原这次提交的代码!

3、刚才发现带了敏感信息,需要彻底消灭

上传之后发现我吐槽的话留在代码中了,万一被pr看到……,我需要把它干掉!

三、撤销提交

对于上述场景1,在还没有做push之前的所有操作,都是在本地代码仓中执行的。我们暂且把对本地代码仓的代码还原操作叫做“撤销”!

1、文件被修改了,但没有执行git add操作(working tree内操作)

# 最好加上--参数
git checkout -- fileName
git checkout .

2、同时对多个文件执行了git add操作,但本次只想提交其中一部分修改的文件

执行了git add只是将文件放入本地仓的暂存区

git add *
git status
# 取消暂存 <>,可以是多个文件
git reset HEAD <fileName>

3、文件执行了git add操作,但想撤销对起的修改(index内回滚)

# 取消暂存
git reset HEAD fileName
# 撤销修改
git checkout fileName 

4. 已经执行了commit操作,想再次修改但不想再次产生新的commit

# 修改最后一次提交
git add sample.java
git commit --amend -m "对整体的日志说明"

5. 已经对本地仓进行多次的commit,现在想撤销到其中某次commit

git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]

关于重置

6、已多次push,借壳上市

修改配置文件是一个非常烦的事情,而且还容易出错,修改了好多次才成功,好难看,可以借用另一个分支暂存代码,并正确配置;在远程删除原分支,并从master分支或者其他同源分支切出和原分支文件名相同的分支;将暂存代码推到该分支,完成借壳上市。

# 查看提交历史,找到想要恢复的commitId
git log --oneline

# 切到指定commitId的位置,但此时并不是分支
git checkout beecca7
# ...
# 从此处切出一个分支
git checkout -b gaox

#推送到远程
git push origin gaox:gaox

四、回滚

上述场景二中已经执行了git push,现在想要把提交到远程仓的代码还原操作叫做“回滚”。高度注意:对远程仓库做回滚是有风险的,需要提前做好备份,并且有必要通知团队其他成员!

如果你每次更新线上代码时,都会打上tag标签,那么对于场景二的处理你会非常快的。

# 查看tag历史,
git tag -n
# 切换到指定标签版本
git checkout <tag>

如果你要是想回到当前HEAD的指向

git checkout <branch_name>

1、撤销指定文件到指定版本

# 查看指定文件的历史版本
git log <fileName>
# 指定文件回滚到指定的commitID
git checkout <commitID><fileName>

2、删除最后一次远程提交

方式一:使用revert

git revert HEAD
git push origin master

方式二:使用reset

git reset --hard HEAD^
git push origin master -f

二者的区别

  • reset:是把HEAD指针指向指定提交,历史记录中不会出现提交记录,私密信息也不会再出现的吐槽**就要用这个了。。。。。
  • revert:是放弃指定的提交修改,但会生成一次新的提交,有提交日志,并且以前的历史记录还会在。。。。

3、回滚某次提交????

git log
git revert commitID

五、删除某次提交

# 查看最近五次提交的简单信息
git log --oneline -n5

 

注意:需要注意最后的^号,意思是commit id的前一次提交

git rebase -i "a74abfc"^

 

在编辑框中删除相关commit,如pick 8e95ef4 添加maven依赖,然后保存退出(如果遇到冲突需要先解决冲突)!

# 强制推送到远程仓
git push origin master -f

通过上述操作,如果你想对历史多个commit进行处理或者,可以选择git rebase -i,只需删除对应的记录就好。rebase还可对 commit 消息进行编辑,以及合并多个commit。

六、强制推送

-f 强制推送,强行用本地仓库覆盖远端仓库。导致的后果就是文件可能被老的内容给覆盖掉,仓库的历史提交记录丢失等等。

万不得已,不要使用!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值