GIT使用文档

68 阅读6分钟

安装GIT

  • GIT官网下载安装包,安装时选择默认选项即可。

配置GIT

查看配置信息

git config --list

⭐ 可指定 --global 选项查看全局配置。

设置用户名和邮箱

git config --global user.name "wangwenkun"
git config --global user.email "wang_wenkun@mail.com"

基本操作

初始化GIT仓库

  1. 在项目跟目录下执行:

        git init
    
  2. (可选)添加 README.md 文件,用于描述项目

  3. (可选)添加 .gitignore 文件,用于指定哪些文件不被版本控制。如:

        # 忽略 log 目录下的所有文件
        log/
        # 忽略所有 .txt 文件
        *.txt
    
  4. 添加所有文件到暂存区:

        git add .
    
  5. 提交暂存区的文件到版本库:

        git commit -m "Initial commit"
    

    ⭐ 其中,"Initial commit" 用于描述本次提交的内容,具体格式可以根据团队习惯和项目需求进行调整。

  6. 添加远程仓库:

        git remote add origin https://github.com/vvangwenkun/firebase-snippets
    

    ⭐ 其中,https://github.com/vvangwenkun/firebase-snippets 是远程仓库的 URL。

  7. 将本地仓库的代码推送到远程仓库:

        git push -u origin main
    

    ⭐ 其中,main 是本地仓库的分支名称。

从远程仓库拉取代码

拉取远程分支最新代码

# 拉取当前分支最新代码
git pull
# 拉取 main 分支最新代码
git pull origin main

下载远程分支代码

git fetch origin main

⭐ 注意,git fetch 命令只是下载远程分支的代码,并不会自动合并到当前分支。而 git pull 命令会自动合并远程分支的代码到当前分支,相当于先执行 git fetch 命令,然后执行 git merge 命令。

合并远程分支代码到当前分支

使用 merge 合并远程分支代码到当前分支

# 合并本地 main 分支 到当前分支
git merge main
# 合并远程 main 分支 到当前分支
git merge origin/main

使用 rebase 合并远程分支代码到当前分支

# 合并本地 main 分支 到当前分支
git rebase main
# 合并远程 main 分支 到当前分支
git rebase origin/main

⭐ 使用 -i 选项可以对沿途的提交进行修改、合并、删除或者重排。

⭐ merge 与 rebase 的区别:

  • merge 会在当前分支创建一个新的提交,用于合并两个分支的代码。
  • rebase 会将当前分支的提交放到远程分支的提交后面,形成一个线性的提交历史。

mergerebase 产生提交历史图示:

reabse&merge.drawio.png

推送本地分支代码到远程仓库

# 推送当前分支代码到远程仓库
git push
# 推送代码到远程仓库 main 分支
git push origin main

本地分支管理

查看本地分支

# 查看本地所有分支
git branch
# 查看本地所有分支,包括远程分支
git branch -a

创建本地分支

# 创建本地分支 branch-name
git branch branch-name
# 创建本地分支并切换到该分支
git checkout -b branch-name

删除本地分支

# 删除本地分支 branch-name
git branch -d branch-name

⭐ 注意,删除分支前需要切换到其他分支。

查询分支状态

查看分支状态

git status

查看分支提交历史

# 查看当前分支的提交历史
git log
# 查看远程分支的提交历史
git log origin/main

⭐ 在进行回滚等操作时,往往需要通过该命令查询分支的提交历史,获取要选取的提交的哈希值。

查看分支差异

# 查看当前分支与远程分支的差异
git diff
# 查看当前分支与本地分支的差异
git diff branch-name
# 查看当前分支与远程分支的差异
git diff origin/main
# 查看当前分支与远程分支的差异,只显示文件名
git diff --name-status branch-name
# 查看当前分支与暂存区的差异
git diff --staged

分支回滚

使用 reset 回滚分支

# 回滚到上一个提交,HEAD~n 表示回滚到前 n 个提交
git reset --hard HEAD~1

⭐ 常用模式:

  • --hard:回滚到指定提交,丢失所有未提交代码。
  • --soft:回滚到指定提交,保留所有未提交代码,这意味着之前的更改依然在暂存区。
  • --mixed:默认模式,回滚到指定提交,保留所有未提交代码,但是将暂存区的代码标记为未暂存。

使用 revert 回滚分支

# 撤销指定提交,生成一个新的提交
git revert commit-id

⭐ 注意,revert 命令会生成一个新的提交,用于撤销指定提交的更改。而 reset 命令会直接修改提交历史,丢失指定提交后的所有提交。

保存修改到 “stash 栈“

将当前工作目录中的所有未提交的修改保存在一个临时栈中,用于稍后恢复。

# 保存当前工作目录中的所有未提交的修改
git stash
# 保存当前工作目录中的所有未提交的修改,并添加一条消息
git stash push -m "stash message"
# 查看 stash 栈中的所有修改
git stash list
# 恢复最近一次 stash 栈中的修改
git stash pop
# 恢复指定 stash 栈中的修改
git stash pop stash@{n}
# 应用指定 stash 栈中的修改到当前分支,但是不会删除 stash 栈中的修改
git stash apply stash@{n}
# 查看指定 stash 栈中的修改
git stash show stash@{n}
# 删除指定 stash 栈中的修改
git stash drop stash@{n}
# 清空 stash 栈中的所有修改
git stash clear 

cherry-pick 命令

从其他分支中选取特定的提交,并应用到当前分支。

# 应用指定提交的更改到当前分支
git cherry-pick commit-id

⭐ 注意,cherry-pick 命令会将指定提交的更改应用到当前分支,但是不会修改提交历史。

分支命名

  • main:生产代码分支,仅通过合并 dev / release 分支更新。
  • dev:开发代码分支,所有功能分支应从 dev 分支创建。
  • feature/xxx:功能开发分支,从 dev 分支创建,完成后合并回 dev 分支。
  • bugfix/xxx:测试环境 bug 修复分支,从 dev 分支创建,完成后合并回 dev 分支。
  • hotfix/xxx:缺陷修复分支,从 main 分支创建,完成后合并回 main 分支并同步到 dev
  • release/vn.n.n(可选):发布分支(如release/v1.0.0),从 dev 分支创建,完成后合并回 main 分支和 dev 分支。

提交信息格式

<type>(<scope>):<subject>

其中,scope 为可选值,type 值则如下表所示:

type说明
feat新功能
fix修复 bug
docs文档变更(如 README、注释)
style格式变更(不影响代码运行的变更,如空格、缩进等)
refactor代码重构(不包括 bug 修复或新功能添加)
test测试用例变更(添加缺失的测试用例或修改已有的测试用例)
chore其他变更,与功能或修复无关的维护性工作(如构建过程或辅助工具的变更),
ci持续集成相关的变更(如配置文件、脚本等)
perf性能优化相关的变更(如代码优化、缓存策略等)

示例:

# bad
add new column name
fix bugs
refactor
add unit text

# good
feat(User): add new column name
fix(User): catch exceptions
refactor(Device): use new communication protocol
test(Order): add unit test

总结

上文介绍了 git 中常用的分支管理命令,包括创建、删除、切换、合并、回滚等操作。同时,但是,git 中还有很多其他的分支管理命令,更多相关的资料可以参考 git 官方文档