- Published on
Git全流程实战手册:从基础配置到多场景协作开发
- Authors
- Name
- Liant
Git实战操作
基本操作
# 创建 SSH 密钥对
# 将公钥添加到码云账号
ssh-keygen -t rsa -C zhangsan
cat C:\Users\zhangsan\.ssh\id_rsa.pub
# 配置 Git 用户
git config --global user.name "姓名"
git config --global user.email "码云邮箱"
# 显示颜色
git config --global color.ui true
# 忽略文件访问权限的变更
git config --global core.filemode false
# 提交和检出均不转换换行符
git config --global core.autocrlf false
# 其他基本操作,不会的百度
git clone
git add
git rm
git commit
git status
git branch
git diff
git checkout
git push
git pull
git log
git merge
git stash
日常操作
# 基本分支
# develop
# test
# master
# 观察所有分支的差异
git show-branch --sha1-name --all
# 观察指定分支的差异,支持通配符
git show-branch --sha1-name zhangsan origin/product test*
# 拉取远程分支的更新,但不合并到本地对应的分支
git fetch origin
git checkout test
git pull
# 等同于
git checkout test
git fetch origin
git merge origin/test
# 将本地分支重置到和远程一样,无论当前分支是否干净都可以这样执行
git checkout test
git fetch origin
git reset --hard origin/test
# 拣取其他分支的某个提交到指定分支
# 先查看某个提交的 commit id
git log
git show-branch --sha1-name --all
git checkout test
git cherry-pick [commit id]
# 如果遇到冲突,按提示解决冲突,再 add,再 git cherry-pick --continue
# 跟进某个分支,有两种情况:
# 1、主分支更新,当前开发分支跟进主分支
# 2、多人开发同一个分支时,其他人对该分支做了新的提交
git checkout develop
git fetch origin
git rebase origin/master
# 或者
git rebase origin/develop
单人独立开发
# 提交修改
git checkout develop
git status
git diff ......
git add ......
git commit -m "......"
# 提交测试
# test 分支应该配置有自动发布
git checkout test
git merge develop
git push origin
# 提交主分支
# 确保代码经过测试,并且不包含调试性的代码,关闭了调试模式(配置文件),不包含生产环境密钥等配置,
# 在码云上提交一个 Pull Request,将 test 分支合并到主分支,并再次核对修改的文件和内容,
# 然后执行正常的发布流程发布到生产环境
单人开发,项目负责人管理
# 和上面的环节是基本上一样的,区别在于:
# 开发者提交 Pull Request,然后由项目负责人审核,然后合并到主分支
单人开发多个功能
# 这时候,应该按照实际上线节奏,以功能来划分分支,以便实现多个功能依次单独发布上线
# 分支划分示例
# user
# goods
# test
# master
# 提交测试
git checkout test
git merge goods
git push origin
# 提交主分支
# 在码云上提交 Pull Request:goods => master
# 这里不能合并 test 到 master,因为 test 分支可能包含了 user 相关的测试代码
多人开发单个功能
# 分支划分示例
# develop
# test
# master
# 提交修改
# origin/develop 很有可能被其他人更新了
git checkout develop
git add -A
git commit -m "......"
git fetch origin
git rebase origin/develop
# 或者 merge,这取决于个人性格和到底本地修改多还是远程修改多
git merge origin/develop
git push origin
# 提交测试
git checkout test
git pull
git merge develop
git push origin
# 提交主分支
# 在码云上提交 Pull Request:test => master
多人开发多个功能
# 多种情况可能同时存在,一个大项目多人参与:
# 1、其中一些功能是几个人同时在开发,
# 2、其中一些人单独开发一个功能,
# 3、其中一些人同时开发着多个功能,
# 4、其中有些功能需要单独发布,
# 5、其中有些功能要合在一起发布,
# 这时候可能既有公共开发分支,也有功能分支,也有姓名分支
# test 分支承担着所有功能的测试
# 分支划分示例
# develop
# user
# goods
# zhangsan
# test
# master
# 提交修改
git checkout goods
git add -A
git commit -m "......"
git fetch origin
# 如果 origin/goods 分支有更新,需要跟进
git rebase origin/goods
# 或者
git merge origin/goods
# 如果 origin/master 分支有更新,也需要跟进,所有分支都应该基于 origin/master
# 也需要视
git rebase origin/master
# 如果 rebase 了 origin/master 就需要强制推送了,加参数 -f
git push origin -f
# 提交测试
git checkout test
git fetch origin
# 如果 test 被强制推送过,将本地 test 分支重置为和 origin/test 一样
git reset --hard origin/test
# 如果 test 没有被强制推送过
git pull
git merge goods
git push origin
# 提交主分支
# 在码云上提交 Pull Request:goods => master
临时修复生产环境问题
# 首先明确一点,所有分支的开发都必须基于 origin/master
# origin/master 分支是保护分支,不应该被直接修改和提交,只能通过 Pull Request 将其他分支的代码合并进来
# 提交修改
git fetch origin product:fix
git checkout fix
git add -A
git commit -m "......"
git push origin
# 提交主分支
# 在码云上提交 Pull Request:fix => master
# 删除分支
git branch -D fix
git push origin --delete fix
# 其他人
git fetch origin -p
回滚到历史版本
# 查看历史提交
git log
git show-branch --sha1-name --all
# 重置到任何分支的任何历史版本
git reset --hard [commit id]
主分支有更新时
# 再次强调原则,所有分支的开发都必须基于 origin/master
# 一旦 origin/master 有更新,一般来说所有分支都应该跟进
# 除非 test 分支有正在测试的功能,且确定主分支的更新和 test 正在测试的功能毫无关系,否则都应该跟进
git checkout goods
git fetch origin
git rebase origin/master
# 如果有冲突根据提示挨个解决冲突
git add ......
git rebase --continue
# 有时候遇到没有更改的提交,会提示执行
git rebase --skip
# 取消 rebase 执行
git rebase --abort
合并多次提交、修改历史提交 commit、调整提交顺序
# 查看历史提交
git log
git show-branch --sha1-name --all
# rebase 当前分支的某个历史提交,以编辑该提交到最新的所有提交
git rebase -i [commit id]

