个人微信公众号:程序猿的月光宝盒
0.记一次使用git push后,覆盖了同事代码的糗事
前言:
都在WebStorm中操作,Idea或者PyCharm同理
为了高度还原尴尬现场,这里在原有项目上新建分支,然后都在分支上操作,一方面怕自己搞炸了,一方面真实环境就是如此
1.还原案发现场的准备工作
1.1 新建分支
注意:
这里创建的分支仅仅在本地仓库
1.2. 分支提交到远程Git仓库
远程查看确认,确实有,说明分支已经创建
2.糗事发生契机
这时候别人可能会和你改同一文件
2.1 假设文件是这个html文件,然后你上传到远程分支
注意这时候都是在刚创建的那个分支操作
可以看到远程分支已经有了
2.2 这时我用另一电脑修改这个文件,并提交到远程,故意模仿他人操作,如图,在远程分支上Linux已经更新过
2.3 本地文件也做不一样的修改,假设自己再不知情的情况下做push操作必然会引起版本冲突
Remote changes need to be merged before pushing
推送前需要合并远程更改
这时你点了合并
上图,把你的和他的都合并提交,但是出现如下警告
Push has been cancelled, because there were conflicts during update. Check that conflicts were resolved correctly, and invoke push again.
Push已被取消,因为在更新期间有冲突。检查冲突是否已正确解决,并再次调用pull。
2.4 此时本地我已经做了版本合并,所以,再次pull
3. 正事来了.回滚吧
现在,你被告知Linux
的为正确的修改,并且你上一步的提交影响到他了,要回滚push
到Linux
操作的阶段
3.1 将win给回滚调,留下Linux的代码
步骤
1. 在目标分支上copy revision number
:
2. 右击项目依次选中:git->Repository->Reset HEAD
Reset Type选Hard,To Commit 写刚复制的版本号,
然后点击Reset按钮
这时候,代码已经回到了老的版本,这个时候不能
提交代码,提交也是会冲突的。
4.提交
1.可以使用命令强制提交
git push -f
或者
2.使用Idea,(我使用的是这个方法)
在最新的commit上复制版本号
使用mixed类型,将上面复制的版本号粘贴进来:
git reset soft,hard,mixed之区别深解
又出来这个提示
3.再次push
此时 代码是最新的正确的,
也就是Linux操作的正确修改
5:验证 上一步的强制push git push -f
1.说明
将程序从错误的复原,回滚到win操作
2.步骤
按照上面的步骤进行操作。
在后面提交的时候,直接强制提交,
则效果是:
可以看到一开始的
对应远程的文件
至此就恢复以及修改了,Linux端只要pull一下就行了,就是最新代码