git操作失误总结
操作步骤
clone
你
fork
的项目
git clone xxxxx
.git
l
添加原作者
库(
该操作只需操作一次即可
)
git remote add upstream xxxxx
.git
这时候我们git remote -v 查看下版本库,发现一个upstream,以后每次提交前,甚至每天上班前,都要从upstream,fetch 然后合并到本地
然后再去提交自己的代码到fork的项目,命令行如下:
git fetch upstream
这个命令就是更新远程git仓库的代码到本地(远程仓库的所有分支的代码都会被更新到本地)这样就不会在合并代码时,有大量的冲突
git merge upstream/dev
将更新的代码合并到本地代码库(此时代码只在你的硬盘上,并没有在你fork的库中)
然后
git status
查看更新的代码,此时有可能你本地的代码也有变动,不过没关系我们一起将代码提交到fork版本库
git add 选择要提交的代码,或者 -A 提交全部
git commit -m "备注"
git push origin dev (我的分支名字叫dev)
至此,代码已经提交到fork库中了
然后我们创建合并请求
选择自己的分支,选择要合并的分支
此时任务基本就完成了。
事情的起因:
此时只是发送了一个PR,最终合并要管理员确认,如果你有权限合并,那么一定要慎重,因为合并操作不当,很容易覆盖其他人的代码,造成不必要的损失,但事情的起因有些复杂,源于我的错误理解(事实也可以实现指定文件不提交):”gitlab指定文件提交“,比如说idea有自己的配置xml,如下图:看着就是不顺眼。
此时作为程序员,强迫症了,干脆提交它,然后指定这些文件不提交,于是我一路 git add -A ,直到代码合并到upstream的dev分支,理想是美好的,我突然想到很多配置文件没有处理,怎么就合并了,于是我赶紧通知同事先不要更新(还好git可以撤销合并,居然包括了了100多个配置文件,有maven的,有idea的,还有代码格式化的)但是如何指定这些文件不要合并呢?gitlab的浏览器可没有这项功能,只要提交了,就必须全部合并过去,于是我就想
1.重新fork代码,并且master代码回退,这样fork版本库中的所提交的代码就全部消失了,但是本地不要pull ,保留修改
2.重新clone fork的代码到一个新的路径,使用beyondCompare通过文件夹的方式比较不同,并合并到新的路径上,
3.提交自己修改的文件,然后再push ,再去合并
git rm --cache filename 可以删除在本地仓库中的文件,但是文件还会保存在硬盘上,这个命令对于这些配置文件确实是实现了指定文件提交
这次的事件就算解决了,但是还没有结束
又过了一天,又产生了新的代码, 但是当我fetch upstream的时候显示更新了2个文件,然后 merge,带着自己的代码push,然后去合并到master,在提交合并的过程中,发现更新的这两个java文件,居然是绿色的,代表是新增的,这令我很费解,因为这是我刚跟新下来的,如果同时更新代码,一定会冲突的,于是我就是用了 git rm --cache命令,先是字本地仓库中删除,然后再push ,在合并,然后再重新提交本地的java代码(fetch更新下来的),这样同事更新就不会冲突了。
还有更悲催的事情
同事提交的一个controller不见了,没错不见了,app同事访问404,同事本地的环境tomcat 不能启动,比较改了一次又一次,还是不能启动,第一次错误是sql。xml文件中有一个Head的多余单词(冲突导致)我在解决冲突的时候,忘了删了(忙中出错啊),还有就是之前都可以启动的tomcat,现在必要要加入一个jar包才可以,还有就是因为格式化导致文件不一致的情况,
真的可以说是一次合并代码产生的血案。真的很心累,很有可能就是昨天合并代码时候,产生了代差,导致有些代码没有更新到本地
,
尽量让组长来合并,如果自己合并代码一定要慎重,再慎重,多余的代码不要提交,如果看idea。的配置文件不顺眼,在.ingore。xml中设置不显示