原来git还可以起死回生!

301 阅读4分钟
       到标题的你们,想必已经知道今天我要说的主人公是谁了吧。那我也不说什么废话了,下面我就通过一个小故事的形式来告诉大家关于git的骚操作!

     今天是小明来公司实习的第一天,大家都知道新人吗?肯定希望自己多干点活,这样才能在公司里混的下去,所以一上班,小明就斗志满满的打开VsCode新建了一个文件夹  。


小明首先通过git init  这个命令 来初始化;接着小明新建了五个文件夹;

小明看到自己建好的文件,他非常高兴,他首先把自己建好的五个文件通过git add git commit -m ""来把文件一个一个添加好


小明是一个一个的添加上去的,在这里还有一个命令可以一次性添加所有那就是git add  . (这个点就是代表选中所有进行提交)

接着小明在终端命令窗口输入了

git log --oneline

来查看他的提交记录


小明查看完之后,他就开始洋洋洒洒的开始写代码了,大家都知道写代码肯定会有bug,此时的小明当他写了几天,他发现自己的代码有很多bug,于是他就想着趁自己的领导没有发现之前赶紧把自己的代码给删了。

于是小明做了一件事那就是让代码回滚

  git reset --hard d970340   (因为在小明实在feature2开始接手公司的项目,所以他就让代码回滚到feature2)。注意:如果你想回到那个文件,你就直接指向这个文件的前面的地址编号。


小明看到一切都回到最开始的位置,他心里说了一句:好险,幸好git可以让我重头再来,于是他又重新建立一个文件feature6,重复了之前的添加,查看的操作


小明正要重新动手大干一番的时候,他发现自己把大佬在文件里面写的东西也删了,大家都知道一般通过命令删除的东西很难找回,但是git就不同,它可以,于是小明在终端命令窗口输入

git reflog 

查看所有的分支记录,包括删除的(下面就是在终端命令窗口输入这个命令显示出来的结果)


接着小明在命令窗口输入

git reset --hard 2c85128

一下就恢复到重置之前的操作,大家可以看到feature3,4,5都恢复回来,这就是git的起死回生的,但是它不仅仅可以起死回生,他可以服从你的命令。


小明把删除的文件找回来了,他还不满意,因为他发现之前删除的是被恢复了,但是后面新建额feature6却不见了,他想要之前的文件在,后面新建的feature6也在。于是小明在命令窗口输入

git cherry-pick

可以理解为我们想要提交的那部分,使用 git cherry-pick可以让你想要提交的那部分合并到当前分支上


git cherry-pick 77c5d11(后面的数字就是前面建立的feature6的SHA)


如果采用git cherry-pick 77c5d11 这个没有成功,那就说明有冲突,当遇见这样的情况,我们就可以通过git commit 来手动提交上去或者git add.后直接使用git cherry-pick --continue继续。

注意:

当出现冲突的时候我们可以采用下面这两种方法解决:

  • 1.执行git cherry-pick --abort取消上次操作。

  • 2.执行git commit --allow-empty,表示允许空提交。

就这样小明把所有的文件都找回来了,这就是小明第一天在公司实习的故事。

如果我们在公司遇到和小明这样类似的情况,不要慌张,可以采用类似的方法解决,千万不要随便让代码回滚。