Git 的正确使用姿势 | 青训营笔记

98 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

版本控制的历史

  • 本地版本控制
    • RSC
    • 本地复制文件夹
  • 集中版本控制
    • 远端服务器保存文件
    • 本地不保存所有版本的代码,容易历史版本丢失
    • 分支支持不好
  • 分布式版本控制
    • Git
    • 分布式开发
    • 分支强大
    • 校验和机制保证完整

Git基本命令

配置

# git config
git config --global user.name "xxx"
git config --global user.email xxx@xxx.com

# git remote
# 查看Remote
git remote -v
# 添加Remote
git remote add origin_ssh git@github.com:git/git.git
git remote add origin_http https://github.com/git/git.git

同一Origin设置不同的Push和Fetch URL

image (1).png

提交

# git add 将文件添加到暂存区
git add .
# git commit 提交
git commit -m "new commit"
# 创建一个分支
git checkout -b dev
# 在当前生成一个tag
git tag v0.0.1
git tag -a ve.0.2 -m "my version vo.0.2"
# git commit --amend 用途
# 1. 提交了代码之后,又有新的改动,不想创建两个commit 
# 2. 发现一个地方改错了,下次提交时不想保留上一次的记录
# git commit --amend 会把暂存区的文件自动加入,可以使用-a把工作区的文件也一起加入
# 可以使用 git commit --amend -m "提交描述" 修改comment
# 使用后commit并不会直接删除,只是没有ref指向它 可以使用 git gc 删除不需要的对象

远端同步

git clone
# git pull 拉取并合并
# git fetch 只拉取远端分支,不合并
git push
# git push origin master -f 会强制推送

Git的对象

  • Blob
    • 存储文件内容
  • Tree
    • 存储文件的目录信息
  • Commit
    • 存储提交信息,一个Commit对应唯一版本的代码

由下至上依次寻找

  • Refs
    • 对应Commit ID
    • refs/heads/分支名
    • refs/tags/标签名

不同的分支管理工作流

Git Flow

  • 包含五种类型的分支
    • Master:主干分支
    • Develop:开发分支
    • Feature:特性分支
    • Release:发布分支
    • Hotfix:热修复分支
  • 优点
    • 如果能按照定义的标准严格执行,代码会很清晰,并且很难出现混乱。
  • 缺点
    • 流程过于复杂,上线的节奏会比较慢。由于太复杂,研发容易不按照标准执行,从而导致代码出现混乱。

Github Flow

  • 只有一个主干分支
  • 团队合作方式
    • owner创建好仓库后,其他用户通过Fork 的方式来创建自己的仓库,并在 fork的仓库上进行开发
    • owner创建好仓库后,统一给团队内成员分配权限,直接在同一个仓库内进行开发

Gitlab Flow

  • Gitlab推荐的工作流是在GitFlow 和Github Flow上做出优化,既保持了单一主分支的简便,又可以适应不同的开发环境。
  • 原则:上游优先
    • 只有在上游分支采纳的代码才可以进入到下游分支,一般上游分支就是master.