本文用来记录工作学习中遇到的一些场景问题,并给出一些解决方案。(实时更新)
git
git是在工作中必须使用的工具,它很强大,但是在一些复杂的场景或者使用之下,它也会给我们带来巨大的困扰。
1.git remote
git remote可以用在本地存放一个remote列表,使用git remote add orgin url的形式可以添加相应的内容。之后在使用pull或者merge等命令时都可以通过+远程名+分支名进行方便操作。
2.git cherrypick
有这么一个场景:有两条分支从同一个节点分叉,上面进行了不同的内容修改,此时想把另一条分支内容拿过来不能直接使用merge(改动量较大,只想要另一条分支中的几条);这时可以使用cherrypick选择目标分支中想要的内容id进行合并。
3.版本回退与git reflog
在进行了一些错误改动提交时,git可以让我们进行版本回退。使用log查看提交id,再使用git reset --hard即可。但是这个操作都是基于同一个head(或者父head),如果你直接修改了head本身,那git log就找不到了。这时可以使用git reflog,理由如下:
git reflog根本不遍历HEAD的祖先。
它是HEAD所指向的一个顺序的提交列表:它的undo历史。
reflog并不是repo(仓库)的一部分,它单独存储,
而且不包含在pushes,fetches或者clones里面,
它纯属是本地的。
4.git rebase
以下纯属为本人想法,git rebase是变基操作,他可以将我们有许多分叉的git log变为一条清晰的直线。我觉得是这样的,比如有下面两个已经进行了merge/pull的改动:
其中f00是远程版本的另一个人提交的改动,582和887是我们本地做的改动,可见log中显示的顺序是代码修改的时间排序。但实际上f00是在之前提交的,这在我们的第一视角中是不好理解这个log的,此时可以使用git rebase,以提交的顺序来进行查看:
是不是很清楚。but 582和887不见了,这时我们版本回退也会一直受到f00的影响,因此有得有失。
5.git stash
git stash是存储本地修改的增量代码,可以在git pull有冲突时使用:git stash->git pull->git stash pop
maven
maven是一个常用的包管理工具,在工作中我们经常会用它来进行代码编译、deploy代码推送等操作。
maven涉及到本地和远程两个库概念,在做项目时,我们一般都会设置特定的settings文件来进行远程库的访问,这可以使我们顺利的进行compile(编译)、install(安装至本地库)等操作;之后我们再在pom文件中用distributionManagement标签放置指定的推送目标库(比如release/snapshot),之后就可以进行deploy推送了。
1.maven依赖树查看
mvn dependency:tree是一个用来查看各个项目依赖树的命令,当有多个子工程与父工程时这是个解决依赖冲突的好选择。
2.maven升代码版本
模块多?手动升容易漏?那么mvn version:set命令是个好选择。具体可以使用如下命令:
mvn version:set -DgenerateBackupPoms=false -DnewVersion=1.1.1-SNAPSHOT
其中第一个参数false是指不备份先前的版本文件,使用非常方便。
3.maven操作指定模块
模块很多,而且有些模块有错误,我们可以指定相应模块进行编译或者发布,命令如下:
mvn clean compile -am -pl 模块名称(可多个)
其中-am参数是指同时处理选定模块所依赖的模块,-pl参数是指指定相应模块进行操作。
4.maven排除parent 版本影响
主要两个方式:1.用< exclusions >标签进行指定包的排除 2.用最外层模块dependencyManagement标签中的dependency来进行包版本的管理。
这里推荐用第二种方式来进行排除版本影响。(在使用这个终极方法前,先替换父项目全局变量试一下)
集合类
1.不可操作集合Arrays.asList()
使用该方法转成的集合为不可操作集合,类似add/remove之类的集合操作都会报错;可以使用Lists.newArrayList()进行替代。(究其原因只是父类抛错了)