这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
一、Git命令
- Git Clone/Pull/Fetch
- Clone: 拉取完整的仓库到本地目录,可以指定分支,深度。
- Fetch: 将远端某些分支最新代码拉取到本地,不会执行merge操作,所以当前分支历史不会有变化。会修改refs/remote内的分支信息,如果需要和本地代码合并需要手动操作。
- Pull: 拉取远端某分支,并和本地代码进行合并。操作等同于git fetch + git merge, 也可以通过git pull-rebase完成git fetch + git rebase操作。
- Git Push (Push是将本地代码同步至远端的方式)
- 一般使用git push origin master命令即可完成
- 冲突问题
- 如果本地的commit记录和远端的commit历史不一致,则会产生冲突,比如git commit-amend or git rebase都有可能导致这个问题。
- 如果该分支就自己一个人使用,或者团队内确认过可以修改历史则可以通过git push origin master-f 来完成强制推送,一般不推荐主干分支进行该操作,正常都应该解决冲突后再进行推送。
- 推送规则限制
-
可以通过保护分支,来配置一些保护规则,防止误操作,或者一些不合规的操作出现,导致代码丢失。
-
二、分支管理工作流
- 不同的工作流
- 集中式工作流(Gerrit/SVN):只依托于主干分支进行开发,不存在其他分支。合入方式为Fast-forward。
- 分支管理工作流(Github/Gitlab): 可以定义不同特性的开发分支,上线分支,在开发分支完成开发后再通过MR/PR合入主干分支。合入方式为自定义,Fast-Forward 或 Three-Way Merge都可以。
- Git Flow: 分支类型丰富,规范严格
- Github Flow: 只有主干分支和开发分支,规则简单
- Gitlab Flow: 在主干分支和开发分支之上构建环境分支,版本分支,满足不同发布 or 环境的需要
Github的工作流,只有一个主干分支,基于Pull Request往主干分支中提交代码。