• 人帅又会用Git是会有免费海底捞吃的
  • 发布于 1个月前
  • 70 热度
    2 评论
  • Mr.null
  • 0 粉丝 3 篇博客
  •   
Pronhup大公司招来了三位实习生「大长腿、字母哥、静静」,经过一周的时间他们已经慢慢适应公司的工作环境。这几天大长腿接到项目经理的一个需求:

用户在看视频的时候,需要同时按住键盘上的「A+P+M」三个键才能观看,否则会直接暂停。但是因为她还不是太熟悉git,一不小心把一个还有bug的版本提交了上去。这个时候大长腿开始慌了,不知道该怎么办才能撤回提交。

大长腿立马向身边的静静和字母发起求救:静静,字母哥,不好了!快来帮我看看怎么才能撤回提交啊!我刚刚一不小心提交了一个有BUG的版本提交上去了,这个要是被甲哥发现,我估计就得gg了。

字母哥路见不平一声吼:大长腿你别急,让我来看看!还好你没有把你的提交push到远程仓库,我看你这个还能抢救。这个时候,你可以用 git log 命令就可以查看历史提交记录。然后找到上一个版本的id,用reset命令就可以退回到上个版本了。
git reset --hard id
大长腿如释负重:牛逼,字母哥好手段啊!之前可担心死我了。还好可以回退回去。

静静心生疑问:字母哥,我看你刚才操作的时候,发现git回退版本的速度好快啊,为什么这么快啊?字母哥雄赳赳气昂昂:git回退速度快,其中的原理只是更改了版本head指针的指向而已。

以前head指针指向你新提交的记录,现在指针只改了个指向,指向到上一个版本,所以回退得快咯。静静由衷佩服:原来字母哥懂这么多啊。我也不太熟悉git里面操作失误如何处理,要不你给我们讲一下吧。

字母哥洋洋得意:其实我们实际操作中,肯定会遇到某个文件被修改,文件不小心被删除「当然删除文件也算作一种修改」,但是之后又后悔之前的修改的情况。

还好有git, 这个时候就可以使用 git status 命令查看当前仓库的状态,被修改的文件都会显示出来。然后再使用上次甲哥讲过的,用git中最常用的切换分支的命令checkout就可以放弃更改了。

大长腿似懂非懂:原来用checkout就可以恢复啊,我试试随便在test.txt里面改两句话。然后
git add test.txt
git checkout test.txt

神奇!!果然恢复了!!

静静一脸正经:别这么一惊一乍嘛,这些基础的东西不应该不知道的。

大长腿跃跃欲试:哈哈,我还要再试一次,太神奇了。我就随便再在还原的文档里面再改动改动,看看还能不能再次还原。然后
git add test.txt
git commit -m "modify test"
git checkout test.txt
 
欸,不对啊,你看这次我为什么又无法恢复修改前的内容啊?

字母哥恨铁不成钢:你随便在test.txt里面修改了几句,相当于工作区修改了;之后你又用add命令,工作区的内容就保存到暂存区了。

用checkout命令只有当本地工作区跟暂存区有修改的时候才有用。但是你这次操作还加了commit,commit之后,工作区跟暂存区都是干净的,是本地仓库有了修改。要撤回本地仓库修改就不归checkout管了,所以你最后一次用checkout才没反应。

大长腿恍然大悟: 哦,那我知道为什么了。我需要先查log,再reset对吧,就像你刚才退回我不小心提交的那个版本一样,对吧?

字母哥孺子可教:是的哦,如果commit之后,相当于目前的head指针指向了最新提交的内容,你需要找到上次提交的内容,用reset修改指针指向。

大长腿小手一抖:哎呀,刚才我一不小心手贱把git关闭了,然后再用git log查看上传记录,一个都看不到了,怎么办啊?

字母哥一口老血:平时使用的时候就得注意点哦,不要不小心关闭git了。不过一个优秀的版本控制系统总会给你好多后悔药吃的。这个时候就需要用到git reflog命令。

git reflog命令会显示出你每一次操作命令,你看你之前的add, commit, log, reset命令这里统统都有显示,然后找到相应版本的id, 再用reset回退。

现在世界就终于清净了。

大长腿爱心泛滥:没想到关于一个git操作失误都有这么多学问,今天麻烦字母哥啦。待会请你跟静静吃海底捞,要不是你帮我这么多,以后就得你们去海底打捞我了。

字母哥洋洋得意:哈哈,这个故事告诉我们,人帅又会用git,是会有免费海底捞吃的。

用户评论