git后悔药
世上没有后悔药
但是git有( ̄︶ ̄*)) 还在担心上班时脑子一热写下臭骂老板的话导致绩效奖没有吗,还在担心提交记录写的丑吗,还在担心远程push的时候不会搞吗,这篇文章用来记录如何解决这些问题。
基本概念
先介绍一些概念:
- 工作区:工作区就是我们修改的文件但是还没有进行git add
- 暂存区:我们使用git add 之后但是还么有进行git commit
- 已提交:进行git commit 之后
- 已经推送到远程仓库:git push之后
- HEAD:Git中的一个特殊的指针,指向了当前所在分支的最新提交。可以使用 ^ 来当作指针修饰符,HEAD^代表前一个提交, HEAD^^或者
HEAD~2代表上两层提交,同理HEAD~n当前提交的第n级父提交
工作区
在工作区进行修改之后,发现不想要了可以使用
git checkout -- <文件名>来撤回修改
不过现在git新版本推荐使用
git restore <文件名> 来撤回修改
暂存区
git reset HEAD <文件名> 使用这个命令可以将这个文件放回工作区,之后如果不想要了可以结合工作区的命令来撤回修改
已提交
- 撤回提交但是保留修改:也就是回到工作区 :
git reset --soft HEAD^ - 撤回提交并且撤回修改:也就是回到暂存区,
git rest --mixed HEAD^可以简写为git rest HEAD^ - 撤回修改并且丢失所有的修改:也就是将工作区和暂存区的修改都给撤回:
git reset --hard HEAD^
已经推送到远程仓库
当你到达这一步的时候,你肯定已经慌了,绩效奖多半是没了(;´д`)ゞ
git revert HEAD
使用这个可以将你修改的东西撤回,然后你将这个新的提交上去就能够覆盖掉你原来的提交了,但是你原来的那个提交还是在记录中的,仍然可以访问的。
还有一种方法可以强制覆盖远程的提交,但是协作中不建议使用,否则你的同事可能会骂你