GitHub 开发流程
流程
GitHub flow算是一种相对简单的Git工作流程,主要步骤为下:
其中上游分仓库称为upstream,远端仓库称为origin。
- 首先从upstream仓库fork代码到远端仓库,然后将远端仓库克隆到本地。
- 给本地仓库添加一个upstream仓库,方便同步最新代码
- 从本地的master(或者develop,根据公司要求)创建一个功能开发分支切换到功能开发分支上进行功能的开发。
- 开发完成后,将代码提交并推送到origin
- 在origin上发起一个pull request请求,代码将会发送给审查者review。
Git flow是一个更规范实用的Git工作流。
- 从远端仓库克隆工作分支到本地,然后本地切换到自己的开发分支上
- 进行功能开发,开发完成后合并到主开发分支
- 如果升级就从开发分支先合并到release分支,release再合并到线上分支
- 如果遇到紧急bug修复,创建hotfix分支,修复后分别合并到线上和开发分支
相关命令
git clone 仓库地址
- 克隆远端仓库到本地,通常情况下只会克隆master- –depth=1 - 只克隆最新提交内容,不克隆历史记录
git remote add upstream git@github.com:fe/github-flow.git
- 添加upstream仓库git checkout -b 开发分支名 基于的分支名
- 创建并切换到开发分支,默认基于master分支git checkout -b product origin/product
- 基于远端分支创建新的分支
git rebase -i 合并多个提交的前一个提交编码
- 将多个提交合并为一个提交- p/pick - 为保留该提交
- s/squash - 保留提交记录,并将提交合并到之前的提交上
- d/drop - 删除该提交记录
git pull upstream master --rebase
- 长时间未同步时同步上游代码保持本地与上游代码一致
升级流程
Github flow升级
本地打tag,然后推送到upstream的master
git tag 标签内容
- 打标签git push upstream 标签内容
- 将标签推送到远端
upstream的master提一个pr到upstream的product
Git flow升级
develop提pr到master分支
本地pull master的分支
本地打tag,推送到远端触发升级
git tag 标签内容
- 本地打标签git push upstream 标签名
- 推送到远端分支
常见问题
在命令行显示git分支
1 | git_branch() { git branch 2> /dev/null | sed -e '/^[^]/d' -e 's/ (.*)/(\1)/' } |
如果希望立即生效,在命令行执行一下代码即可
1 | source $HOME/.bashrc |
git中文文件名显示问题
1 | git config --global core.quotepath false |
遇到conflict处理
当使用git pull upstream master --rebase
的时候,可能会遇到conflict的问题。处理办法:
- 遇到conflict时,分支会自动切换到临时分支上,并且在冲突地方给出提示。
- 手动进行冲突处理
- 使用
git add .
将重新处理的添加到暂存区- 使用
git rebase --continue
恢复到之前到分支上,完成处理
其他git命令
git branch -m oldName newName
- 分支重命名git branch -d/-D 分支名
- 删除分支git branch -a
- 查看所有本地分支和远端分支git remote -v
- 查看所有远端仓库地址git push origin --delete 分支名
- 删除远端分支git config --list
- 查看本机git用户信息git config user.name
git config user.email
git commit --amend --reset-author
- 修改commit提交作者git commit --date="周 月 日 时间 年 +0800" -am "提交"
- 指定commit时间和内容git commit --amend --date="Thu Aug 9 23:04:57 2018 -0700"
- 修改commit时间git show
- 查看最近一次提交的变更git show -5
- 查看最近五次提交的变更git show commit_id
- 查看指定提交的变更
git remote update origin --prune
- Git刷新分支