Git2️⃣本地仓库 & 分支

本文基于本地仓库,介绍 Git 常用的基础指令分支指令

1、初始化

  1. 创建目录作为本地仓库。

  2. 进入目录的 Git bash,执行初始化命令

    git init
    
  3. 生成 .git 隐藏文件,说明初始化成功。

    image

2、本地仓库

根据不同的 Git 指令操作,文件存在不同的状态。

  • 工作区(workspace):存放项目代码的地方。

  • 暂存区(index):提交到本地仓库之前的缓存。

    image

2.1、重要指令(❗)

2.1.1、status

status:查看文件状态

  • 格式

    git status
    
  • 不同区域的状态

    • 工作区:untracked(新建-未追踪),unstaged(修改-未暂存)

    • 暂存区:staged(暂存)

      image

2.1.2、add

add:将工作区指定内容添加到暂存区。

格式

# 添加指定内容
git add xxx
# 通配符:添加所有内容
git add .

2.1.3、commit

commit:将暂存区所有内容提交到本地仓库的当前分支。

格式

# 提交所有内容
git commit -m "注释信息"

2.1.4、日志

① log

log:查看版本提交记录

  • 格式:常用参数如下

    1. all:显示所有分支

    2. pretty=oneline:将每条记录优化为单行显示

    3. abbrev-commit:将 commitID 缩写显示

    4. graph:以图的形式显示

      git log --pretty=oneline --all --graph --abbrev-commit
      
  • 示例:👉 2.3.3 配置指令别名

    image

② reflog

reflog:查看版本所有操作记录

  • 格式

    git reflog
    
  • 示例

    image

③ 说明

  1. 日志中的 HEAD 代表最新提交版本,以及位于该版本的分支。
  2. 若发生版本回退:
    • log:仅支持查看回退版本号之后的记录。
    • reflog:支持查看所有版本的记录 + 已删除的 commit 记录。

2.2、忽略文件

场景:部分文件无需提交,不需要被 Git 管理(如临时文件、日志)。

实现:在工作目录创建 .gitignore 文件,定义要忽略的文件。

  1. 指定文件

  2. 指定后缀

  3. 指定文件夹

    # 指定文件
    Hello.java
    
    # 指定后缀
    *.txt
    
    # 指定文件夹
    **/log/*
    

2.3、版本切换

reset:通过 commitID 切换版本(回退/还原)

格式:通过 log 或 reflog 查看 commitID。

git reset --hard <commitID>

3、分支(❗❗)

作用:使用分支进行不同操作(开发、测试、缺陷修复),避免影响主线(master)。

3.1、branch

本地分支

  1. 查看分支* 表示所在分支。

    # 分支名
    git branch
    # 详细信息
    git branch -vv
    
  2. 创建分支:基于当前分支创建,二者内容相同。

    git branch 分支名
    
  3. 删除分支:不能删除当前分支,只能删除其他分支。

    • -d:删除前检查

    • -D:不做检查,强制删除

      git branch -d 分支名
      git branch -D 分支名
      

示例

image

3.2、切换

3.2.1、checkout

checkout:检出(切换)分支

Hint:分支上的内容必须先 commit 或 stash,才能切换分支。

  1. 格式

    • 切换到指定分支。

    • 基于当前分支创建新分支,并切换(👍)。

      # 切换
      git checkout 分支名
      
      # 创建并切换
      git checkout -b 分支名
      
  2. 示例

    image

3.2.2、stash

stash:将分支上的内容暂时缓存,而不提交。

场景:开发时需要临时切换到其它分支,将当前分支内容缓存到一个栈结构中。

  1. 查看:查看当前栈中的缓存内容。

  2. 保存:将工作区内容保存到栈中。

  3. 删除:将栈中内容删除。

    • drop:指定索引
    • clear:所有
  4. 恢复:将内容恢复到当前工作区。

    • apply:指定索引内容(仅应用不删除)

    • pop:栈顶内容(应用并删除)

      # 查看
      git stash list
      
      # 保存
      git stash save "注释信息"
      
      # 删除
      git stash drop stash@{索引}
      git stash clear
      
      # 恢复
      git stash apply stash@{索引}
      git stash pop
      

示例

image

3.3、合并

原理:最近公共祖先(LCA)

3.3.1、merge

merge:将其它分支的内容合并到当前分支。

  1. 格式

    git merge 分支名
    
  2. 示例:出现分叉说明有多个分支在提交。

    image

3.3.2、rebase(*)

相比 merge,会修改基。

不建议在实际开发中使用。

3.3.3、冲突处理

冲突:合并分支时,多个分支对同个文件的同一行进行修改,Git 无法确定合并结果。

  • 机制:发生冲突时,Git 会在冲突文件中列出不同分支对同一行的修改情况,由开发者保留最终结果。

  • 步骤

    1. 发生冲突:执行 merge 指令,且发生冲突之后。

      image

    2. 保留结果:打开冲突文件,保留需要的结果。

      image

    3. 提交:将冲突文件添加到暂存区,提交到仓库(即 add, commit)。

      image

3.4、分支规范(*)

3.4.1、常用分支

  • master:主分支,对应生产环境
  • dev:开发主分支,对应开发环境
    • 从 master 检出
    • 阶段开发完成后,合并到 master 准备上线。
  • test:测试分支。对应测试环境的应用
    • 通常从 dev 合并
    • 开发完成并提测后,由测试人员进行使用。

3.4.2、衍生分支

  • dev-xxx:开发者分支,对应一个开发人员。
    • 从 dev 检出,开发完成后合并到 dev
  • feature/xxxx:新功能分支,对应一个业务功能。
    • 从 dev 检出,开发完成后合并到 dev。
    • 通常是同期并行开发,但不同期上线时创建的分支
  • hotfix/xxxx(bugfix/xxxx):缺陷修复分支
    • 通常是测试人员发现 bug,创建分支用于修复 bug。
posted @ 2022-05-13 10:58  Jaywee  阅读(93)  评论(0编辑  收藏  举报

👇