问题背景
在多人协作开发的项目中,一般都是从master中新建一个分支进行修改开发,完了就提交、合并、删除分支。可很多时候就是不长记性,分支也不建直接在master上开干,做完之后一顿操作梦如虎,git status -> git add . -> git commit -m ‘’ 一气呵成,当正要提交的时候,瞄了一下编辑器左下角,吗惹,怎么还在master分支上,凉凉~~~~~~~
未等我汗滴留下来,心想,git那么强大的工具,对于这种情况的处理肯定有完整的回退解决方案的吧,一查吗,果不其然,哈哈哈哈
解决步骤
1、看下提交记录
命令:
git log
不过这样输出比较琐碎难看,一般来说是通过以下这句来查看提交记录:
git log --pretty=oneline
每行前面那串长长的东西就是每次提交所生产的唯一标识,其实就是哈希值,这个标识很有用,回退到哪个版本全靠它
2、回退到上次提交,并且保留修改
git reset --soft 319c879dc5ff2d18d71164523c2009da6bcf2011 //假设这串东西是修改之前的最近一次提交的哈希值
这样就会恢复到没有commit前的状态,而且最重要的是!我们的修改还在,oh no 太强大了
注意,git --reset 后面跟的可以是soft或者hard,如果是hard的话,就是简单粗暴,回退的同时修改也会不见,所以一般不建议用hard。
3、暂存修改,切换分支
先把修改暂存起来,然后查看分支状态,嗯,很干净,赶紧切个分支再说,切到新的分支再把修改的内容恢复到当前分支岂不是美滋滋,就这么干
git stash
这样就把修改暂存起来了,
执行 git status查看当前分支状态,ok, 暂存之后空空如也~~~
然后赶紧切换个分支:
git checkout -b 分支名
这个命令是新建分支再切到新建分支,如果原本就有分支的就直接git checkout 分支名 就可以了
4、恢复暂存、添加 提交猛如虎
好的,来到现在这个分支,加入分支名为dev
首先,看下暂存的东西
git stash list
就像这样,前面的stash@{0}就是暂存的标识,因为同一分支可能有很多暂存内容,我们可以选择性的恢复暂存
对于只有一个暂存的情况,直接使用以下命令恢复暂存到工作区:
git stash pop
看下当前工作状态,嗯,哭了,回来了 ----
最后
提交 -> 推送 ->合并 -> 删除分支(删不删随意)