1: Git与GitHub的应用

Git 与 GitHub 入门指南

欢迎来到版本控制的世界!本指南将带你深入了解 Git 和 GitHub,从基本概念到日常协作流程,并使用图表让复杂的概念变得一目了然。无论你是编程新手还是想系统学习的开发者,这篇教程都将是你的得力助手。

为什么需要版本控制?

想象一下你正在进行一个复杂的项目,无论是写代码、写论文还是设计作品。你一定会遇到以下问题:

  • 混乱的文件管理项目_v1.zip, 项目_v2_final.zip, 项目_final_final_我发誓是最终版.zip… 这种方式既原始又低效。
  • 无法追溯的错误:你今天写的代码导致整个项目无法运行,但你不记得昨天做了哪些修改,想恢复到之前的版本变得异常困难。
  • 协作冲突:你和你的同伴修改了同一个文件,当你们试图合并工作时,一个人的修改覆盖了另一个人的,造成了“代码冲突”的噩梦。

版本控制系统 (Version Control System, VCS) 正是为解决这些问题而生的。

Git 是当今最流行、最强大的分布式版本控制系统。它就像一个精密的时光机和协作中心,能够:

  1. 记录每一次变更:对文件的每一次增、删、改,Git 都会拍下一张“快照”(snapshot)。
  2. 随时回溯历史:你可以轻松地将整个项目恢复到过去的任意一个“快照”状态。
  3. 支持并行开发:通过“分支”功能,团队成员可以在不互相干扰的独立空间里开发新功能。
  4. 高效解决冲突:当不同人的修改发生冲突时,Git 提供了工具来帮助你清晰地合并它们。

GitHub 又是什么呢? 它是一个基于云的代码托管平台。如果说 Git 是你本地的“时光机”,那 GitHub 就是这个“时光机”的云端枢纽和社交网络。它提供了:

  • 远程仓库:一个安全的地方来存储你的代码和所有版本历史。
  • 协作工具:强大的 Pull Request、Code Review 和 Issue Tracking 功能,让团队协作变得前所未有的高效。
  • 个人名片:一个展示你技术实力的平台,你的 GitHub 主页就是程序员最好的简历。

总结:Git 是工具,负责版本控制;GitHub 是平台,负责代码托管与协作。

安装与初次配置

1. 安装 Git

  • Windows: 访问 git-scm.com/download/win 下载安装包。安装时,建议一路使用默认选项,它会自动安装 Git Bash,一个在 Windows 上模拟 Linux 命令行的强大工具。
  • macOS:
    • 最简单的方式是安装 Xcode Command Line Tools。打开“终端”(Terminal) 并输入 xcode-select --install
    • 或者使用 Homebrew (推荐) 安装:brew install git
  • Linux (Debian/Ubuntu): 打开终端并输入 sudo apt-get install git

安装后,打开终端 (或 Git Bash) 输入 git --version,如果看到版本号,说明安装成功。

2. 配置你的身份

安装 Git 后,第一件事就是设置你的用户名和邮箱。这个身份信息会附加到你的每一次“提交”(commit) 上,让别人知道是谁做的修改。

# 设置你的 GitHub 用户名
git config --global user.name "Your GitHub Username"

# 设置你的 GitHub 注册邮箱
git config --global user.email "your.email@example.com"

--global 标志表示这是全局配置,你电脑上所有的 Git 项目都会默认使用这个配置。

Git 核心工作流与本地操作

Git 的核心在于其三个主要区域的流转。理解了这个模型,你就理解了 Git 的一半。

  1. 工作区 (Working Directory): 你在电脑上能直接看到和编辑的项目文件夹。
  2. 暂存区 (Staging Area/Index): 一个虚拟的区域,用于临时存放你希望包含在下一次提交中的变更。它像一个购物车的概念,你可以把修改好的东西一件件放进去,最后统一“结账”。
  3. 本地仓库 (Local Repository): .git 隐藏文件夹,存放了项目所有的版本历史“快照”。一旦变更被提交到这里,它就永久地记录下来了。

工作流图解

下面这张图清晰地展示了文件在三个区域之间的流转过程:

graph TD
    A["工作区<br>(Working Directory)"] -- "git add" --> B["暂存区<br>(Staging Area)"]
    B -- "git commit" --> C["本地仓库<br>(Local Repository)"]
    C -- "git checkout" --> A
    A -- "编辑文件<br>(Edit files)" --> A

实战演练:你的第一个仓库

  1. 初始化仓库 (git init)

    • 在电脑上创建一个新文件夹,例如 git-project
    • 通过终端进入该文件夹:cd path/to/git-project
    • 执行初始化命令: bash git init 这个命令会在当前目录下创建一个名为 .git 的子目录,你的本地仓库就此诞生。
  2. 检查状态 (git status) git status 是你最应该频繁使用的命令。它会告诉你当前仓库的状态:哪些文件被修改了?哪些文件在暂存区?

  3. 创建文件并添加到暂存区 (git add)

    • git-project 文件夹中创建一个 README.md 文件,并写入 “Hello, Git!”。

    • 现在运行 git status,你会看到 README.md 出现在 “Untracked files” (未跟踪文件) 列表中。

    • 使用 git add 命令来跟踪这个文件,并将其变更放入暂存区。

      # 添加指定文件到暂存区
      git add README.md
      
      # 如果想添加所有已修改或新增的文件,使用点号
      # git add .
    • 再次运行 git status,你会看到 README.md 现在处于 “Changes to be committed” (待提交的变更) 列表中。

  4. 提交变更到仓库 (git commit) 当暂存区里的内容准备就绪后,就可以使用 git commit 将它们“拍摄快照”并存入本地仓库。

    # -m 参数允许你直接在命令行提供提交信息
    git commit -m "Initial commit: Create README.md"

    编写好的 Commit Message 至关重要! 它应该简洁明了地描述本次提交的目的。一个好的习惯是使用 “动词+宾语” 的格式,例如 “Fix: user login bug” 或 “Feat: add user profile page”。

  5. 查看提交历史 (git log) 想回顾你走过的路吗?git log 会按时间倒序列出所有的提交记录,包括哈希值 (唯一ID)、作者、日期和提交信息。

连接 GitHub,走向世界

现在,你的项目只存在于你的电脑上。让我们把它推送到 GitHub,实现云端备份和远程协作。

本地与远程关系图解

graph TD
    subgraph "Your Computer"
        A["本地仓库(Local Repo)"]
    end

    subgraph "GitHub Cloud"
        B["远程仓库(Remote Repo)"]
    end

    A -- "git push" --> B
    B -- "git pull / git clone" --> A

操作步骤

  1. 在 GitHub 创建远程仓库

    • 登录 GitHub,点击右上角 “+” -> “New repository”。
    • 填写仓库名称 (建议与本地文件夹同名,如 git-project)。
    • 保持 “Public” (公开) 或选择 “Private” (私有)。
    • 非常重要不要勾选任何 “Initialize this repository with…” 的选项,因为我们已经有了一个本地仓库。
    • 点击 “Create repository”。
  2. 关联本地与远程 (git remote add) 创建后,GitHub 会提供一个 URL。复制这个 HTTPS 或 SSH 格式的 URL。回到你的终端,运行:

    # 将 '你的仓库URL' 替换成你刚刚复制的地址
    git remote add origin 你的仓库URL
    • git remote add:添加一个远程仓库的引用。
    • origin:是这个远程仓库的默认别名,你也可以取别的名字,但 origin 是约定俗成的。
  3. 推送本地变更 (git push) 最后,将你本地 main 分支上的所有提交推送到远程仓库 origin

    git push -u origin main
    • push:推送动作。
    • -u (或 --set-upstream):建立本地 main 分支与远程 origin/main 分支的联系。这个参数只需要在第一次推送时使用。之后,你只需要简单地运行 git push
    • origin:远程仓库的别名。
    • main:你要推送的本地分支名。

    现在,刷新你的 GitHub 仓库页面,代码已经成功上传!

分支——安全开发的“平行宇宙”

分支 (Branch) 是 Git 最强大的功能之一。它允许你从主线 (通常是 main 分支) 创建一个独立的副本,在新功能开发、Bug 修复等工作中,你可以在这个副本上自由地实验,而不会影响到主线的稳定性。

分支与合并图解

gitGraph
   commit id: "Initial"
   branch feature-A
   checkout feature-A
   commit id: "Add button"
   commit id: "Style button"
   checkout main
   merge feature-A
   commit id: "Release v1.0"

上图展示了:

  1. main 分支创建了一个 feature-A 分支。
  2. feature-A 上进行了两次提交 (开发新功能)。
  3. 开发完成后,切换回 main 分支。
  4. feature-A 分支上的所有工作合并 (merge) 回 main 分支。

分支常用命令

  • 查看所有分支:

    git branch

    星号 * 标记的是你当前所在的分支。

  • 创建新分支:

    git branch <分支名>
    # 例如: git branch new-feature
  • 切换分支:

    git checkout <分支名>
    # 例如: git checkout new-feature
  • 创建并立即切换到新分支 (常用):

    git checkout -b <新分支名>
    # 例如: git checkout -b another-feature
  • 合并分支: 首先,切换到你希望接纳变更的分支 (目标分支),通常是 main

    git checkout main

    然后,执行合并命令,将其他分支的变更合并进来。

    git merge <要合并的分支名>
    # 例如: git merge new-feature
  • 删除分支: 当一个分支的工作已经合并完成,通常会将其删除以保持仓库整洁。

    git branch -d <分支名>

日常协作流程

%%{init: { 'logLevel': 'debug', 'theme': 'base', 'gitGraph': {'showBranches': true, 'showCommitLabel': true, 'mainBranchName': 'main'}} }%%
gitGraph
    commit id: "初始化项目"
    branch develop
    checkout develop
    commit id: "开发环境配置"
    
    %% --- 功能A开发 ---
    branch feat/user-login
    checkout feat/user-login
    commit id: "实现UI界面"
    commit id: "完成后端API对接"
    
    %% --- 在功能A开发的同时,主干发现紧急bug ---
    checkout main
    branch hotfix/bug-payment-api
    checkout hotfix/bug-payment-api
    commit id: "紧急修复支付掉单Bug"
    checkout main
    merge hotfix/bug-payment-api tag: "v1.0.1"
    
    %% --- 紧急修复也需要合并到develop分支 ---
    checkout develop
    merge main id: "同步紧急修复"
    
    %% --- 功能A开发完成,合并回develop ---
    checkout develop
    merge feat/user-login id: "合并用户登录功能"
    
    %% --- 功能B开始开发 ---
    branch feat/data-report
    checkout feat/data-report
    commit id: "设计报表模型"
    commit id: "完成报表前端"
    checkout develop
    
    %% --- 功能C也开始开发 ---
    branch feat/performance-opt
    checkout feat/performance-opt
    commit id: "优化数据库查询"
    
    %% --- 功能B开发完成,合并回develop ---
    checkout develop
    merge feat/data-report id: "合并数据报表功能"
    
    %% --- 功能C开发完成,合并回develop ---
    checkout develop
    merge feat/performance-opt id: "合并性能优化"
    
    %% --- 准备发布新版本 ---
    branch release/v1.1.0
    checkout release/v1.1.0
    commit id: "版本文档和最终测试"
    
    %% --- 正式发布:合并到main并打上标签 ---
    checkout main
    merge release/v1.1.0 tag: "v1.1.0"
    
    %% --- 将发布分支的修改也合并回develop ---
    checkout develop
    merge release/v1.1.0 id: "同步发布版本v1.1.0的修改"

在真实的项目中,你通常会从一个已经存在的项目开始工作。

  1. 克隆远程仓库 (git clone) 要获取 GitHub 上的项目到你的本地,使用 git clone

    # 替换为项目的URL
    git clone https://github.com/some-user/some-project.git

    这个命令会自动创建项目文件夹,初始化 .git 仓库,并自动设置好远程别名 origin,还会将项目的所有数据都拉取下来。

  2. 保持本地更新 (git pull) 在你开始一天的工作前,或者在准备开发新功能前,务必从远程仓库拉取最新的变更,确保你的本地版本是最新的。

    git pull origin main
    # 如果已经设置了上游分支,可以直接用 git pull

    git pull 实际上是 git fetch (从远程拉取最新数据) 和 git merge (将远程分支合并到本地) 的一个快捷命令。

  3. GitHub Flow:一个标准的协作模型 这是一个被广泛采用的、简单高效的协作流程:

    1. main 分支创建一个描述性命名的新分支 (git checkout -b fix-login-bug)。
    2. 在新分支上进行编码和提交
    3. 将你的新分支推送到 GitHub (git push origin fix-login-bug)。
    4. 在 GitHub 上,为你的分支创建一个 Pull Request (PR)。PR 是一个请求,请求项目维护者审查你的代码,并将其合并到 main 分支。
    5. 团队成员在 PR 上进行讨论和代码审查 (Code Review)
    6. 一旦审查通过,项目维护者会在 GitHub 网站上点击合并 (Merge Pull Request) 按钮。
    7. 合并后,你可以安全地删除你的功能分支。

实战:用 GitHub Pages 搭建你的个人主页

现在,你已经掌握了 Git 和 GitHub 的核心技能,是时候将它们付诸实践,创建一个所有开发者都梦寐以求的“技术名片”——你的个人网站。GitHub 提供了一项名为 GitHub Pages 的免费服务,可以让你轻松地将你的代码仓库变成一个公开的网站。

前端开发简介

网页是由三种核心技术构建的:

  • HTML (HyperText Markup Language): 定义了网页的结构内容。比如,标题、段落、图片、链接等。
  • CSS (Cascading Style Sheets): 负责网页的样式外观。比如,颜色、字体、布局、边距等。
  • JavaScript: 赋予网页交互性动态功能。比如,响应用户点击、表单验证、动画效果等。

我们将创建一个只包含 HTML 和 CSS 的简单静态页面,并将其部署到 GitHub Pages。

搭建步骤

  1. 创建一个特殊的仓库 登录 GitHub。点击右上角的“+”号,选择 “New repository”。这一步至关重要:

    • Repository name (仓库名称) 必须是 <你的GitHub用户名>.github.io。例如,如果你的用户名是 octocat,那么仓库名必须是 octocat.github.io
    • 必须设置为 Public (公开)
    • 可以勾选 “Add a README file” 来初始化仓库,这会使后续的克隆操作更简单。
  2. 克隆仓库到本地 进入你刚刚创建的仓库页面,点击绿色的 “<> Code” 按钮,复制 HTTPS URL。然后,在你的电脑终端中运行 git clone

    # 将URL替换为你自己的仓库URL
    git clone https://github.com/YourUsername/yourusername.github.io.git
  3. 创建你的主页文件 使用 cd 命令进入刚刚克隆下来的文件夹:

    cd yourusername.github.io

    创建一个名为 index.html 的文件。这个文件名是特殊的,当别人访问你的网站时,GitHub Pages 会默认显示这个文件的内容。在 index.html 文件中写入以下基础 HTML 代码:

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>我的个人主页</title>
        <style>
            body { font-family: sans-serif; line-height: 1.6; margin: 40px; background-color: #f4f4f4; color: #333; }
            .container { max-width: 800px; margin: auto; background: #fff; padding: 20px; border-radius: 8px; box-shadow: 0 0 10px rgba(0,0,0,0.1); }
            h1 { color: #0366d6; }
            a { color: #0366d6; text-decoration: none; }
            a:hover { text-decoration: underline; }
        </style>
    </head>
    <body>
        <div class="container">
            <h1>欢迎来到我的世界!</h1>
            <p>你好,我是 [你的名字]。这是我用 GitHub Pages 搭建的个人网站。</p>
            <p>你可以在 <a href="https://github.com/YourUsername" target="_blank">这里</a> 找到我的 GitHub 主页,关注我的开源项目。</p>
        </div>
    </body>
    </html>

    提示: 记得将 [你的名字]YourUsername 替换成你自己的信息。

  4. 提交并推送到 GitHub 现在,按照我们学过的标准 Git 流程,将你的新主页上传到 GitHub。

    # 1. 将所有新文件和修改添加到暂存区
    git add .
    
    # 2. 提交变更,并附上有意义的信息
    git commit -m "Feat: Create initial homepage"
    
    # 3. 将本地提交推送到远程仓库
    git push origin main
  5. 在 GitHub Settings 中配置 Pages 默认情况下,名为 <username>.github.io 的仓库会自动启用 GitHub Pages。但了解设置过程对所有项目都至关重要。

    1. 在浏览器中打开你的 GitHub 仓库页面。

    2. 点击仓库导航栏右侧的 “Settings” 标签。

    3. 在左侧的菜单中,找到并点击 “Pages”

    4. 在 “Build and deployment” (构建与部署) 部分,你会看到 “Source” (源) 的选项。请确保它的设置为 “Deploy from a branch” (从分支部署)。

    5. 在下方的 “Branch” (分支) 设置中:

    • 选择你刚刚推送代码的分支,通常是 main (或者 master)。
    • 文件夹选项保持默认的 / (root)
    • 点击 “Save”
    1. 保存后,页面顶部会出现一个蓝色的提示框,告诉你 “Your site is live at https://<你的用户名>.github.io”。有时,GitHub 需要一两分钟来完成部署(这个过程被称为 Action)。你可以点击提示框中的链接查看你的网站。
  6. 见证奇迹! 访问 https://<你的GitHub用户名>.github.io,你应该就能看到你刚刚创建的、拥有简单样式的个人主页了!

现在,你拥有了一个可以向全世界展示的个人网站。你可以继续学习 HTML 和 CSS 来美化它,或者添加你的项目作品集,让它成为你真正的在线简历。

总结

恭喜你完成了这份详细的指南!现在你应该对 Git 和 GitHub 有了扎实的理解。

  • 核心理念:版本控制是为了追踪历史和促进协作。
  • 本地三区:工作区 -> git add -> 暂存区 -> git commit -> 本地仓库。
  • 远程交互git clone 开始,git pull 更新,git push 分享。
  • 分支是关键:始终在独立的分支上工作,通过 Pull Request 合并,以保证 main 分支的稳定。