IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Git入门使用指南

    chancel发表于 2024-03-08 00:00:00
    love 0
    <![CDATA[

    本文将记录入门的git命令,适用于有其他版本管理经验的人快速了解git的常见操作

    Git 是一个分布式版本控制系统,用于跟踪代码更改并协同开发项目,支持在本地进行代码更改,然后将这些更改推送到远程存储库,其他人可以拉取和合并这些更改到自己的本地代码库

    git提供的3个主要特性分别是:

    1. 分布式
    2. 版本控制
    3. 多人协作

    以上3个特性在开发工作中都提供了非常强大的工作支持

    1. 安装

    git官网:https://git-scm.com/

    git官方支持Windows/MacOS/Linux等,在Windows下安装git还可以顺带获得bash环境,这也是很多开发人员在Windows上使用Linux Bash环境的常用方法之一

    在安装完成后,请在CLI中设置git账户信息,这个账户信息会在提交时作为默认值

    git config --global user.name [username]
    git config --global user.email [ycs1026@vip.qq.com]
    

    2. 使用

    以下会针对git的常见操作做介绍,分别是仓库、文件、版本以及分支4个常用场景的使用方法

    2.1. 仓库管理

    在创建一个代码项目后,切换到该代码项目下,初始化仓库,请放心,这不会对代码项目有任何污染

    git init  # 仓库初始化
    git add . # 追踪文件
    

    在仓库初始化后,还添加了对所有文件的追踪,如果你需要忽略文件,可以在项目根目录下添加一个.gitignore文件,忽略规则写法如下:

    # .gitignore文件注释以#开头
    file.txt            # 忽略特定文件
    directory/          # 忽略特定目录
    *.log               # 忽略所有以 .log 结尾的文件
    /logs/              # 忽略根目录下的 logs 目录
    src/*.txt           # 忽略 src 目录下所有以 .txt 结尾的文件
    !important.txt      # 不忽略 important.txt 文件
    !/docs/             # 不忽略根目录下的 docs 目录
    *.zip               # 忽略所有 .zip 文件
    !important.zip      # 但不忽略 important.zip 文件
    /logs               # 忽略根目录下的 logs 目录
    logs/               # 忽略任意位置的 logs 目录
    

    写好忽略规则后,就可以绑定远程空白仓库

    git remote add origin http://example/example.git    # 绑定远程空白仓库
    git push -u origin main                             # 将当前分支绑定到远程仓库的main分支
    

    通常一次正常的代码开发流程如下

    # 拉取同步到最新代码
    git clone http://example/example.git
    
    # 切换新的本地分支
    git checkout main
    
    # 更新分支代码到最新
    git pull origin main
    
    # 切换到新功能分支进行代码开发
    git checkout -b faeture-branch
    
    # 进行代码开发
    ...
    
    # 提交代码开发
    git commit -m "update code to ..."
    
    # 切换到主分支并合并代码
    git checkout main
    git pull
    git merge faeture-branch
    
    # 推送代码到远程仓库
    git push origin main
    

    第一步的克隆是针对有原始代码的仓库,也可以是上面的空白仓库创建与绑定

    2.2. 文件管理

    git最主要的是提供了文件管理,在修改文件后,可以与原始仓库对比看看修改了哪些文件

    git status
    

    可以丢弃对某个文件的更改

    git checkout -- file.txt
    

    可以查看文件修改历史

    git log -- file.txt
    

    2.3. 版本管理

    git实现对代码版本的定义,通过借助tag来区分不同版本的代码

    常见的tag操作如下

    git tag                         # 查看所有tag
    git tag v1.0                    # 添加当前仓库版本为v1.0版本tag
    git tag v1.0 8a3                # 为commit为8a3开头的提交添加v1.0版本的tag
    git tag v1.0 -m "v1.0 version"  # 为tag添加注释
    git push origin v1.0            # 推送v1.0的标签到远程
    git push origin --tags          # 推送本地所有标签到远程仓库
    git tag -d v1.0                 # 删除标签
    

    通常在一次版本代码开发完成后,都会打上tag并推送到远程仓库,tag方便帮助定位问题以及自动化部署集成

    2.4. 分支管理

    每次修改代码完成后都会推送到远程仓库的具体分支下,常见分支包括:

    • main/master分支:通常用于发布生产环境,具备最新稳定版本的代码分支,是受保护的分支
    • develop分支:用于集成各个功能特性分支的中央分支
    • Faeture分支:用于开发单个功能的分支
    • Hotfix分支:用于修复生产环境紧急问题的分支,修复后及时删除
    • Release分支:在发布新版本之前的进行最后测试的分支

    分支的常见操作如下

    git branch -a                                   # 查看所有分支(包括远程仓库)
    git branch remote -v                            # 查看远程仓库的分支
    git checkout -b feature-branch                  # 从当前分支切换并创建feature-branch的功能分支
    git checkout -b feature-branch origin/main      # 拉取远程main分支并创建切换到本地feature-branch分支
    git branch --set-upstream-to = origin/main main # 将本地分支main关联到远程仓库的main分支
    git merge feature-branch                        # 合并feature-branch功能分支到当前分支
    git branch -D feature-branch                    # 删除feature-branch分支
    

    分支用于区分不同的工作情况,包括:

    • 本地常规功能开发
    • 本地修复生产环境问题
    • 测试环境进行版本测试
    • ...

    如果没有分支,以上情况都在main分支工作将会变得十分混乱

    许多CI/CD部署基于分支和版本(tag)进行管理,合理规范使用分支和标签是必要的

    3. 其他

    3.1. git stash

    当你修改了代码,却因为各种原因(如生产环境紧急修复)需要紧急修改代码,会发现无法切分分支,因为当前分支有未保存的工作

    git stash可以帮助你暂存当前工作目录的修改,让你可以在不想提交修改的情况下切换到其他分支进行其他操作

    使用如下:

    # 将当前工作区修改暂存
    git stash
    
    # 查看暂存列表
    git stash list
    
    # 切分到其他分支完成工作
    ...
    
    # 切换回来当前分支
    ...
    
    # 恢复方法一:恢复最近的暂存并将其从 stash 中移除
    git stash pop
    
    # 恢复方法二:恢复最近的暂存但不移除stash中的记录
    git stash apply
    
    # 有多个stash,需要恢复指定的stash
    git stash apply stash@{n}
    
    # 丢弃最新的stash
    git stash drop
    
    # 丢弃指定的stash
    git stash drop stash@{n}
    

    3.2. Gitflow

    Gitflow 是一种基于分支管理的工作流程,旨在帮助团队有效地组织和管理代码库中的开发和发布流程

    Gitflow通常包含主分支(main/master)、开发分支(develop)、特性分支(feature)、发布分支(release)以及修复分支(hotfix)

    代码通常从特性分支开始编写,完成功能后合并到开发分支,在汇聚多个特性分支后合并到release分支进行发布前的测试和验证,通过测试验证后合并到main/master分支并发布产品,在线上发现紧急问题后创建修复分支并合并到main/master分支中修复问题

    Gitflow是比较常见的工作流,也有其他的工作流包括Gitlabflow、Githubflow等,可自行查阅

    另外一个值得注意的是,Gitflow也有推荐的提交注释格式,包含:

    1. 使用动词开头:如Fix、Add、Update等来描述此次提交的目的
    2. 描述语法:应该使用"一般现在时"来描述提交内容
    3. 分隔行:可以使用空行来分隔标题和正文,以增加可读性

    示例如下

    Add feature to allow users to reset passwords
    
    - Implemented a new feature to allow users to reset their passwords
    - Added UI components for password reset form
    - Fixed bug related to password reset functionality
    
    Issue #123
    

    遵循规范的提交注释格式可以使提交历史更清晰易读,方便团队协作和代码维护

    3.3. Pull Requet(PR)

    在Git中,PR代表Pull Request,是一种用于协作和代码审查的机制,常见于github中

    当你在需要在一个非本人拥有的代码仓库中开发新功能或修复bug时,通常会基于某个分支进行开发,当你完成开发并希望将你的代码合并到目标分支(如主分支)时,你可以创建一个Pull Request来请求仓库的所有者审阅你的代码,审阅通过后你的代码将合并到主目标的分支中

    PR多依赖于界面操作,其步骤通常如下:

    1. Fork代码仓库到自己账户下
    2. Clone代码仓库并创建分支修改代码
    3. 合并代码并推送代码到自己的远程仓库
    4. 向目标代码仓库发起PR请求

    4. 尾语

    以上是git的常见用途,git的知识还有非常多,随着使用会愈发惊叹这个程序的不可思议



沪ICP备19023445号-2号
友情链接