一、恢复误删的本地分支
作为一枚强迫症,没用的分支总是喜欢及时删删删删掉删掉统统删掉,结果今天发现有些分支还是应该保留。
比如,①前段时间切了个分支用来专门做图表,但因为需求还没有最终确定,已经上线了测试服而没有上正式服。②现在需要对那部分图表进行改动,就发现本地除了测试分支外,其它分支都没有图表相关代码了。③如果从测试分支切一个出来修改,又会有新的问题:等到上线的时候,我这个分支需要合并到prod中,那就相当于将test分支的一些代码也给合并到prod了,那可真的是太太太太危险了!!!
所以,只能是把之前的分支找回来,我在网上找了一些方法,发现都不够方便,最终用以下方法很顺利地就恢复了。
第一步:首先,我只是删除了本地分支并且我已经不记得确切的名字了,远程分支并没有删除,所以直接先查一下远程分支寻找一下是哪个名字(如果还记得误删的分支叫啥名字,就不用查了)。
git branch -a //查看本地和远程所有分支
//或者
git branch -r //只查看远程分支
第二步:直接checkout切换去目标分支。切换后可以发现,在该分支可以看到以前的所有提交记录,太感动了!!!
git checkout <branch name>
第三步:git pull拉一下代码,完事。估计不拉也没事儿,因为和远程本来就是同步的。
git pull
二、将某个提交从一个分支复制到另一个分支
我应当是把代码提交到B分支的,但是由于各种原因不小心提交到了A分支,现在需要把提交在A分支的commit给复制到B分支,可以这么操作:
第一步:先切换到 A 分支。
git checkout
第二步:查询错误commit的ID并复制出来。
git log
第三步:切换到B分支(正确的目标分支)。
git checkout B
第四步:将该commit给pick到B分支。(比如ID是99f8684713f7f7beacbe4968ff4232c41f9d572f)。
git cherry-pick 99f8684713f7f7beacbe4968ff4232c41f9d572f
注意:这里的ID就是要pick的那个commit自己的ID。
此时,可以再git log查看一下,可以发现B分支上已经有这个commit了,但是commit ID已经变了,所以这是复制,而不是转移,A分支上的这个错误的commit依然存在。于是,我们需要去A分支把它删掉。
①先切换到 A 分支。
git checkout
②查询错误commit的 ID并复制出来。
git log
③把这个错误的commit删除掉(比如ID是1f5fea8fe88974f0bc9d106ad3f88fc4a9b4c222)。
//如果这个commit是最新的提交,可以reset让这个commit毫无痕迹地消失,一去不复返
git reset --hard 1f5fea8fe88974f0bc9d106ad3f88fc4a9b4c222(目标版本号)
git push -f
//如果这个错误commit后面还有其他commit,一定要用revert去回退啊~~但是它会增加一条记录
git revert 1f5fea8fe88974f0bc9d106ad3f88fc4a9b4c222(目标版本号)
git push
注意:这里的ID指的是目标版本的ID(要回到的位置),一般是错误commit的前一个commit的ID。