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与GitHub的应用
Git 与 GitHub 入门指南
欢迎来到版本控制的世界!本指南将带你深入了解 Git 和 GitHub,从基本概念到日常协作流程,并使用图表让复杂的概念变得一目了然。无论你是编程新手还是想系统学习的开发者,这篇教程都将是你的得力助手。
为什么需要版本控制?
想象一下你正在进行一个复杂的项目,无论是写代码、写论文还是设计作品。你一定会遇到以下问题:
- 混乱的文件管理:
项目_v1.zip,项目_v2_final.zip,项目_final_final_我发誓是最终版.zip… 这种方式既原始又低效。 - 无法追溯的错误:你今天写的代码导致整个项目无法运行,但你不记得昨天做了哪些修改,想恢复到之前的版本变得异常困难。
- 协作冲突:你和你的同伴修改了同一个文件,当你们试图合并工作时,一个人的修改覆盖了另一个人的,造成了“代码冲突”的噩梦。
版本控制系统 (Version Control System, VCS) 正是为解决这些问题而生的。
Git 是当今最流行、最强大的分布式版本控制系统。它就像一个精密的时光机和协作中心,能够:
- 记录每一次变更:对文件的每一次增、删、改,Git 都会拍下一张“快照”(snapshot)。
- 随时回溯历史:你可以轻松地将整个项目恢复到过去的任意一个“快照”状态。
- 支持并行开发:通过“分支”功能,团队成员可以在不互相干扰的独立空间里开发新功能。
- 高效解决冲突:当不同人的修改发生冲突时,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。
- 最简单的方式是安装 Xcode Command Line Tools。打开“终端”(Terminal) 并输入
- 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 的一半。
- 工作区 (Working Directory): 你在电脑上能直接看到和编辑的项目文件夹。
- 暂存区 (Staging Area/Index): 一个虚拟的区域,用于临时存放你希望包含在下一次提交中的变更。它像一个购物车的概念,你可以把修改好的东西一件件放进去,最后统一“结账”。
- 本地仓库 (Local Repository):
.git隐藏文件夹,存放了项目所有的版本历史“快照”。一旦变更被提交到这里,它就永久地记录下来了。
工作流图解
下面这张图清晰地展示了文件在三个区域之间的流转过程:
实战演练:你的第一个仓库
初始化仓库 (
git init)- 在电脑上创建一个新文件夹,例如
git-project。 - 通过终端进入该文件夹:
cd path/to/git-project。 - 执行初始化命令:
bash git init这个命令会在当前目录下创建一个名为.git的子目录,你的本地仓库就此诞生。
- 在电脑上创建一个新文件夹,例如
检查状态 (
git status)git status是你最应该频繁使用的命令。它会告诉你当前仓库的状态:哪些文件被修改了?哪些文件在暂存区?创建文件并添加到暂存区 (
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” (待提交的变更) 列表中。
提交变更到仓库 (
git commit) 当暂存区里的内容准备就绪后,就可以使用git commit将它们“拍摄快照”并存入本地仓库。# -m 参数允许你直接在命令行提供提交信息 git commit -m "Initial commit: Create README.md"编写好的 Commit Message 至关重要! 它应该简洁明了地描述本次提交的目的。一个好的习惯是使用 “动词+宾语” 的格式,例如 “Fix: user login bug” 或 “Feat: add user profile page”。
查看提交历史 (
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
操作步骤
在 GitHub 创建远程仓库
- 登录 GitHub,点击右上角 “+” -> “New repository”。
- 填写仓库名称 (建议与本地文件夹同名,如
git-project)。 - 保持 “Public” (公开) 或选择 “Private” (私有)。
- 非常重要:不要勾选任何 “Initialize this repository with…” 的选项,因为我们已经有了一个本地仓库。
- 点击 “Create repository”。
关联本地与远程 (
git remote add) 创建后,GitHub 会提供一个 URL。复制这个 HTTPS 或 SSH 格式的 URL。回到你的终端,运行:# 将 '你的仓库URL' 替换成你刚刚复制的地址 git remote add origin 你的仓库URLgit remote add:添加一个远程仓库的引用。origin:是这个远程仓库的默认别名,你也可以取别的名字,但origin是约定俗成的。
推送本地变更 (
git push) 最后,将你本地main分支上的所有提交推送到远程仓库origin。git push -u origin mainpush:推送动作。-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"
上图展示了:
- 从
main分支创建了一个feature-A分支。 - 在
feature-A上进行了两次提交 (开发新功能)。 - 开发完成后,切换回
main分支。 - 将
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的修改"
在真实的项目中,你通常会从一个已经存在的项目开始工作。
克隆远程仓库 (
git clone) 要获取 GitHub 上的项目到你的本地,使用git clone。# 替换为项目的URL git clone https://github.com/some-user/some-project.git这个命令会自动创建项目文件夹,初始化
.git仓库,并自动设置好远程别名origin,还会将项目的所有数据都拉取下来。保持本地更新 (
git pull) 在你开始一天的工作前,或者在准备开发新功能前,务必从远程仓库拉取最新的变更,确保你的本地版本是最新的。git pull origin main # 如果已经设置了上游分支,可以直接用 git pullgit pull实际上是git fetch(从远程拉取最新数据) 和git merge(将远程分支合并到本地) 的一个快捷命令。GitHub Flow:一个标准的协作模型 这是一个被广泛采用的、简单高效的协作流程:
- 从
main分支创建一个描述性命名的新分支 (git checkout -b fix-login-bug)。 - 在新分支上进行编码和提交。
- 将你的新分支推送到 GitHub (
git push origin fix-login-bug)。 - 在 GitHub 上,为你的分支创建一个 Pull Request (PR)。PR 是一个请求,请求项目维护者审查你的代码,并将其合并到
main分支。 - 团队成员在 PR 上进行讨论和代码审查 (Code Review)。
- 一旦审查通过,项目维护者会在 GitHub 网站上点击合并 (Merge Pull Request) 按钮。
- 合并后,你可以安全地删除你的功能分支。
- 从
实战:用 GitHub Pages 搭建你的个人主页
现在,你已经掌握了 Git 和 GitHub 的核心技能,是时候将它们付诸实践,创建一个所有开发者都梦寐以求的“技术名片”——你的个人网站。GitHub 提供了一项名为 GitHub Pages 的免费服务,可以让你轻松地将你的代码仓库变成一个公开的网站。
前端开发简介
网页是由三种核心技术构建的:
- HTML (HyperText Markup Language): 定义了网页的结构和内容。比如,标题、段落、图片、链接等。
- CSS (Cascading Style Sheets): 负责网页的样式和外观。比如,颜色、字体、布局、边距等。
- JavaScript: 赋予网页交互性和动态功能。比如,响应用户点击、表单验证、动画效果等。
我们将创建一个只包含 HTML 和 CSS 的简单静态页面,并将其部署到 GitHub Pages。
搭建步骤
创建一个特殊的仓库 登录 GitHub。点击右上角的“+”号,选择 “New repository”。这一步至关重要:
- Repository name (仓库名称) 必须是
<你的GitHub用户名>.github.io。例如,如果你的用户名是octocat,那么仓库名必须是octocat.github.io。 - 必须设置为 Public (公开)。
- 可以勾选 “Add a README file” 来初始化仓库,这会使后续的克隆操作更简单。
- Repository name (仓库名称) 必须是
克隆仓库到本地 进入你刚刚创建的仓库页面,点击绿色的 “<> Code” 按钮,复制 HTTPS URL。然后,在你的电脑终端中运行
git clone:# 将URL替换为你自己的仓库URL git clone https://github.com/YourUsername/yourusername.github.io.git创建你的主页文件 使用
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替换成你自己的信息。提交并推送到 GitHub 现在,按照我们学过的标准 Git 流程,将你的新主页上传到 GitHub。
# 1. 将所有新文件和修改添加到暂存区 git add . # 2. 提交变更,并附上有意义的信息 git commit -m "Feat: Create initial homepage" # 3. 将本地提交推送到远程仓库 git push origin main在 GitHub Settings 中配置 Pages 默认情况下,名为
<username>.github.io的仓库会自动启用 GitHub Pages。但了解设置过程对所有项目都至关重要。在浏览器中打开你的 GitHub 仓库页面。
点击仓库导航栏右侧的 “Settings” 标签。
在左侧的菜单中,找到并点击 “Pages”。
在 “Build and deployment” (构建与部署) 部分,你会看到 “Source” (源) 的选项。请确保它的设置为 “Deploy from a branch” (从分支部署)。
在下方的 “Branch” (分支) 设置中:
- 选择你刚刚推送代码的分支,通常是
main(或者master)。 - 文件夹选项保持默认的
/ (root)。 - 点击 “Save”。
- 保存后,页面顶部会出现一个蓝色的提示框,告诉你 “Your site is live at
https://<你的用户名>.github.io”。有时,GitHub 需要一两分钟来完成部署(这个过程被称为 Action)。你可以点击提示框中的链接查看你的网站。
见证奇迹! 访问
https://<你的GitHub用户名>.github.io,你应该就能看到你刚刚创建的、拥有简单样式的个人主页了!
现在,你拥有了一个可以向全世界展示的个人网站。你可以继续学习 HTML 和 CSS 来美化它,或者添加你的项目作品集,让它成为你真正的在线简历。
总结
恭喜你完成了这份详细的指南!现在你应该对 Git 和 GitHub 有了扎实的理解。
- 核心理念:版本控制是为了追踪历史和促进协作。
- 本地三区:工作区 ->
git add-> 暂存区 ->git commit-> 本地仓库。 - 远程交互:
git clone开始,git pull更新,git push分享。 - 分支是关键:始终在独立的分支上工作,通过 Pull Request 合并,以保证
main分支的稳定。