工作中的git
一、背景
工作中天天都需要使用git,各种idea也都集成了可视化的git操作界面,个人在工作中一直不习惯使用git可视化,坚持使用git bash,习惯使用各种命令进行操作。本文主要是记录自己日常使用git的习惯,以及处理不同场景的方式,目前暂未出现过任何问题,如果对git使用不熟悉,可以进行参考。
二、工作流程
2.1 分支分类
- master:主分支,现网发布分支,受保护分支(不支持reset操作、可设置为只有仓库拥有者拥有权限)
- dev :开发分支、联调分支,用于开发自己测试以及跟客户端进行联调使用,分支内的功能比较混乱
- test:测试分支,提供给测试进行测试的分支,当开发需要提测时,将feature分支合并到test分支进行测试
- feature:功能需求分支,用户进行功能开发的分支,从master分支checkout过来
- hotfix:现网bug修复分支,临时使用,从master分支checkout过来
如果没有足够的资源的话,如没有联调环境等,都是本地开发的话,可以简单点来,直接本地将feature分支功能自测通过后,直接合并到test分支进行提测。
针对feature分支,可以不用feature-user这样的命名,可以使用如gitlab、coding等上面的issue号码,根据功能创建issue,根据issue编号创建如feature-1这样的分支名称。
测试完成后,可以将feature分支合并至master分支,这个时候需要进行审核,看feature分支有没有新加内容,直接看提测的最后的commitId 跟 当前最新的commitId是不是一致。
2.2 开发新功能
当有新需求需要开发时,需从master新建一个功能分支。
git checkout master # 切到master |
然后就可以开始各种 git add 、git commit 、git push 。
多人开发,使用同一个分支的话,push前先pull下,如果喜欢经常commit,建议合并下commit
如:
λ git log --pretty=oneline # 查看提交日志 |
将上面三个commit合并成一个commit
git rebase -i f2693b5ec6bf055f0803d3e920e5b37515023203 |
跟着指令操作就可以将commit进行合并,然后git push -f 提交到远程
多人操作同一个分支的时候, 使用-f 参数的时候要注意不要覆盖别人的代码,也可以每个人使用一个功能子分支,如:feature-1.1、feature-1.2 这样的,自己部分开发自测完成,合并至feature-1功能主分支。
2.3 再来一个新功能
如果这个功能比较小的话,就临时修改几行代码,并且feature-1上的代码开发也可以暂停,建议就直接从master分支上切feature-2分支,如2.2流程。
如果feature-1的代码就写了一半,又不愿意提交的话,可以直接提到暂存区。
git stash # 将修改提交至暂存区 |
如果开发的功能很大,同时会出现交替开发的情况,这个时候就不建议直接checkout一个新的分支,因为这样的话,你同时只能对一个分支就行开发,交替开发的话需要切换分支,同时利用idea进行开发的话,切换分支也会重新进行文件索引,个人建议使用worktree新开个工作区。
git worktree add ../test master # 这样会在项目的同级目录,新建一份代码在test文件夹下,可以在当前目录进行开发,并且这个工作目录跟主目录是共享一个repository |
用worktree的好处就是两个需求互不影响,同时也可以用idea打开两份分支代码,这样就可以随时切换功能需求开发了,但是worktree也有些弊端,比如不能是同一个分支等。
2.4 两个分支合并代码
2.4.1 分支内容比较多
分支commit比较多的情况下,个人一般直接使用git merge,这样就算有冲突也只用解决一次。
git merge feature-2 # 当前分支合并feature-2分支内容 |
2.4.2 分支内容不多
如果你的分支commit10个以内的话,建议直接用git rebase ,这样的话会保留commit log,以便之后查看,以及回退到指定的commit。
git rebase feature-2 # 这样的话,会将你当前分支的commit,在feature-2的基础上重新执行 |
2.4.3 几个commit
两三个commit的话,直接cherry-pick吧,将需要的代码,在你当前分支上执行。
git checkout feature-2 # 切到想要合并的分支 |
2.5 对比代码
git diff commit1 commit2 # 对比两个commit |
2.6 查看commit修复
git show commitId # 查看指定commitId的修复内容 |
2.7 查看当前分支来源
可以查看当前分支是从哪个分支checkout出来的 |
2.8 回退代码
回退代码基本使用两种方式,git reset和git revert ,两者的区别就在于你是否需要保留相应的commit。
git reset commitId # 回退到指定的commit,指定commit之后的commit都会清除 |
三、更多操作
根据工作中常用的流程来说,上诉的命令可以让我很好的操作git了,还有很多命令可以参考官方文档。