问题
以前一直在项目中使用SVN..感觉真的很好用,不管是切分支,合并分支,编辑冲突,还是更新代码什么的都感觉很方便...现在新公司项目里使用git...我自己虽然用过,但是多人合作一直没用过.所以遇到了一个很蛋疼的问题百度一直没有答案,今天偶然发现了一个解决办法.
项目里肯定有很多配置文件,经常会有一些同学不小心上传自己的配置,我本地也修改过这个配置并且不打算提交,但是别人提交的新的版本里有这个文件,然后整个版本我都不能pull下来,因为会提示你当前的修改会被覆盖.
解决办法
比如我有这么一个文件
eclipse里修改,但是不提交.
然后我在别的仓库里修改并提交远程
这个时候pull代码会报错(与资源库同步视图里merge操作).
因为这个文件没提交.reset我肯定是不想做的,因为我的修改就没了.commit我也不想做,因为我个人配置不想上传到服务器的版本中去.
所以应该选stash就是暂存当前这个文件.
这个时候eclipse里的那个java文件会被还原,同时会多一个stash的记录,保存着前面被还原的文件.
因为这个时候文件已经被还原了,以及和以前的历史版本一致,所以可以pull了.我们执行pull
更新完以后..我们可以再把刚才stash的文件pop出来.
在之前那个stash@{0}上面右键 apply stashed changes
会提示冲突.很正常....
也有可能不会有冲突..有冲突的话要自己去解决.没有冲突的话那就没啥问题了.
在TestGit上右键mergeTool就可以编辑冲突了..
左边文件是别人那里提交的,右边是我stash的.
编辑好以后右键TestGit选择mark as merged就OK了
这个时候就成功更新了别人的代码,并且没有提交自己的修改了...
感想
1.这点我感觉还是SVN好用...可以选择直接不更新这个配置文件,使用自己的本地配置,同时更新版本中的其他文件(也有可能是我GIT用的不熟没发现这个功能)
2.合并的时候感觉没SVN好用.SVN可以再eclipse里列出服务器版本,我的版本,合并后的版本,我再egit里没法操作,要用外部的工具,比如beyondcompare.但是这样的话代码着色功能就没了.很蛋疼.
3.stash好像蛮好用,可以缓存一堆文件,还可以有N个stash要哪个就弹出哪个...这样真的挺好的,我可以stash N个不同的配置...就是不知道这样是不是正确用法...