最近两天,公司的git合并代码时,出现了严重的问题,浪费很多时间;
现在记录下;
情况是这样的,一个同事自己的本地分支(远程没有),不知怎么的,有了别人开发分支的代码,而他自己又不知道;
其在切换到主分支,并merge自己的分支,此时其已经把别人正在开发的代码都合并到了主分支。
到了晚上准备升级时,才发现,主分支的代码出了问题;此时版本库是这样的:
如图100047dcc这一步就有不该有的代码;
而此时版本库已经提交过了很多次,现在的问题就是,如何撤销掉100047dcc提交的代码,并且保留其他人提交的代码。
这个问题,折腾到了晚上9点半左右,尝试了网上给出的:
1 2 | git rebase -i commit_id //再通过将pick改为drop |
但是,实际的效果是,100047dcc代码没了,其他人提交的代码也没有了!
也就是给人感觉和git reset --hard be8c6f6dd没有什么区别!
最后因为太晚,从提交记录上看,100047dcc之后就一个人提交了代码,所以就执行了:
1 2 3 4 | //先切一个备份分支 git branch -b master_tmp //再执行 git reset --hard be8c6f6dd |
之后,那个人(也就是我)从备份分支上把文件拷贝回来—(因为我是直接在主分支上改的,自己的分支并没有代码)。
第二天,我打算去拷贝文件,我执行如下操作: