git | 青训营笔记

151 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记

Git

  • 代码托管
  • 代码智能
  • 代码分析
  • 持续集成
  • Cloud IDE

目标

  1. 基本命令
  2. 研发规范

版本控制演进

  1. 新建文件夹

  2. 本地版本控制

    • 增量保存
  3. 集中式版本控制

    • 远程服务来保存
    • 本地无版本,不保存所有版本代码
  4. 分布式版本控制

    • 每个库保存完整提交历史

    • 记录是完整文件快照而不是增量

      • 故大文件支持不好

基本命令

初始化

 git init

查看

 git status
 git log

.git结构

 .git
 ├── branches
 ├── config
 ├── description
 ├── HEAD //当前的branch
 ├── hooks
 ├── info
 │   └── exclude
 ├── objects
 │   ├── info
 │   └── pack
 └── refs
     ├── heads
     └── tags

配置

  1. 作用域

    • system

      • /etc/gitconfig
    • global

      • ~/.gitconfig
    • local

      • 当前.git/config
  2. 常用配置

    • 用户名[user]

    • 别名[alias]

    • remote[remote]

      • http remote
      • ssh remote

追踪

 git add

查看文件

 git cat-file -p 

修改历史版本

  1. commit --amend
  2. rebase
  3. filter --branch

git gc

  • gc
  • reflog
  • 指定时间
  git reflog expire --expire=now --all
  git gc --prune=now

数据类型

object

  1. commit
  2. tree
  3. blob
  4. tag

commit -> tree -> blob

image-20220518165526085

commit间用parent commit关联

image-20220518173015106

refs(指针)

  • branch

    • git checkout -b [brach-name]
  • tag

    • git tag [tag-name]

规范

工作流

集中式工作流

  • 仅基于master分支开发

分支关联工作流

  • gitflow

    • 支持多种类型分支
  • github flow

    • 只有一个主干分支,基于pr向主干分支提交

    • 方式

      1. 同仓库 pr
      2. 自己fork
    • 保护分支:不能直接push,需要branch + pr

  • gitlab flow

    • 基于github flow优化

都使用merget合并代码

代码合并

  • fast-forward

    • 无merge节点,合并后保持线性历史
    • 需要rebase
  • tree-way merge

    • 默认,产生merge节点

如何选择

github flow

  • 少量多次
  • pr后至少有code review再合入
  • 主干分支尽量保持整洁,使用fast-forward,合入前rebase