参考 Gitlab flow,这里以开发新功能为例
- feature 分支必须(MUST)以 master 主分支最新代码为基线创建(换句话说,就是临时分支的根源必须是 master 主分支。如下这种方式也是可以的:从 master 创建了 feature/a,然后又从 feature/a 创建了 feature/b,注意合并顺序)
- 建议(RECOMMENDED)将本地 feature 分支推至远端
- 在 feature 分支进行功能开发、编码
- 提交 commit
- 使用 git merge —no-ff 将 feature 分支合并进 develop 分支
- 在 develop 分支自测、联调(若有 bug,回到步骤 3)
- 使用 git merge —no-ff 将 feature 分支合并进 test 分支
- 在 test 分支提测(若有 bug,回到步骤 3)
- 将 master 的最新代码同步至 feature 分支(若为公共分支,使用 git merge —no-ff;若为个人分支,使用 git rebase -i master)
- 将 feature 分支合并进 master(在符合 commit message 规范 的前提下,应该使用 git merge —squash;否则使用 git merge —no-ff)
- 使用 master 分支进行上线
- 删除本地及远端的 feature 分支
git merge —no-ff
git rebase -i master
git merge —squash
--squash选项的含义是:本地文件内容与不使用该选项的合并结果相同,但是不提交、不移动HEAD,因此需要一条额外的commit命令。其效果相当于将another分支上的多个commit合并成一个,放在当前分支上,原来的commit历史则没有拿过来。
判断是否使用--squash选项最根本的标准是,待合并分支上的历史是否有意义。
如果在开发分支上提交非常随意,甚至写成微博体,那么一定要使用--squash选项。版本历史记录的应该是代码的发展,而不是开发者在编码时的活动。
只有在开发分支上每个commit都有其独自存在的意义,并且能够编译通过的情况下(能够通过测试就更完美了),才应该选择缺省的合并方式来保留commit历史。
git 撤销操作
如果不小心git commit 了的话
git reset --soft HEAD^//或者git reset --soft HEAD~1// 如果进行两次的commit,想要都撤回git reset --soft HEAD~2// 修改注释git commit --amend
—soft 不删除工作空间的改动代码 ,撤销commit,不撤销git add file —hard 删除工作空间的改动代码,撤销commit且撤销add
git log
// 列举几个常用的 log 参数// 输出 log 的首行git log --pretty=oneline// 只输出首行的 commit 信息。不包含 hash 和 合并信息等git log --pretty=format:%s// 查找有关“更新菜单配置项”的提交git log --grep="更新菜单配置项"// 打印出 chenfangxu 的提交git log --author=chenfangxu// 红色的短 hash,黄色的 ref , 绿色的相对时间git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset'
删除分支
// 删除本地分支// 先查看所有分支, 输入q退出git branch -a// 先切换到其他分支,再删除git checkout mastergit branch -D XXX// 如果发现删错了本地分支,可以直接checkout 恢复git checkout XXX// 删除远端分支git push origin --delete XXX
git rebase
在目标分支
合子分支, 步骤
- git pull
- git merge feature/xxx
-
在子分支
拉目标分支最新代码,首先要切换到目标分支
git checkout master
- git pull
- git chekout feature/xxx
- git pull
- git rebase master
- git pull
- git push
有冲突则解决冲突
git 常用命令
开发任何一个页面/活动,最好都是从master分支上新建个人分支,合并到dev分支
git 初始化
// 1,生成ssh keycd ~/.ssh/ssh-keygen -t rsa -C "公司开发邮箱"// 复制 id_rsa.pub 里的内容到 gitlab或github上去// 设置用户名和密码git config --global user.name "name" | 设置用户名git config --global user.email "eamil" | 设置用户邮箱// 2, clone 项目,新建分支git clone git@XXX// 一般默认是master, 先新建自己的分支git checkout -b XXX
git 提交
// 3,提交代码git add .git commmit -m "xxx"git push// 然后会提示输入// git push --set-upstream origin XXX// 输入就行git push --set-upstream origin XXX
git 分支
// 4, 合并分支// 首先,把想要合并的目的分支拉到本地git statusgit checkout -b test origin/test// 在任何分支,有合并操作前,一定一定一定 要先 git pull 拉去最新代码git pull// 把XXX分支合并到test分支git merge XXX// 5,推送到远端git push origin test// 6, 删除本地分支// 先查看所有分支, 输入q退出git branch -a// 先切换到其他分支,再删除git checkout developgit branch -d XXX// 7, 删除远端分支git push origin --delete XXX
git stash
// 9.1 如果在a分支上开发,突然b分支有一个紧急bug需要修复,这个时候需要git stash save "备注名"git checkout b // 修复完成之后git checkout agit stash list // 查看git stash show stash@{n} // 查看n里面的内容git stash pop // 应用最新的一个stash,并删除它的备份git status apply stash@{n} // 应用,但不删除备份 git stash list 仍然可以读取到git stash drop // 默认删除最新的一个git stash drop stash@{n} // 删除stash@{n}
解决冲突
// 8,查看命令历史,日志 q 退出git log --oneline// 10, 解决冲突// 10.1 在本地分支,提交前一定要git pull 一下// 在目标分支,merge之后,出现冲突,找到冲突文件,然后解决冲突,在冲突行,先复制自己的修改内容,再选择使用他人的修改,然后把自己的修改粘贴在后面// 向master提merge request 出现冲突,解决方案,先切换到master分支,git pull然后切回自己的分支,git pull, git merge master, 解决冲突之后,再提merge request
