张宁的个人博客
莫道君行早,更有早行人。
好好上网
业余无线电
效率提升
软硬件知识
新能源汽车
S1:短波频率
关于
张宁的个人博客
上一篇
下一篇
Git 与 GitHub 入门教程:从零理解版本管理、主线与分支(2/2)
张宁的个人博客
2026-01-15
阅读 4
软件&硬件
> 本文面向 Git 初学者,介绍 Git 与 GitHub 的基本概念、Windows 下的常见操作、主线与分支的工作原理,以及版本发布和恢复方法。示例使用 **NuliBlog** 作为项目名称,其他项目也可以采用相同方法。 ## 目录 1. Git 与 GitHub 是什么 2. 版本管理的核心概念 3. 主线与分支如何工作 4. Windows 下使用 Git 5. 第一次使用:配置 Git 6. 创建本地仓库并完成首次提交 7. 创建 GitHub 远程仓库并关联 8. 日常开发:检查、暂存、提交和同步 9. 使用分支开发并合并到主线 10. Tag 与 Release:管理正式版本 11. 查看差异、撤销修改和恢复版本 12. GitHub Desktop 图形界面 13. .gitignore 与项目安全 14. Git 常用命令速查 15. Git 命令中的英文单词与参数说明 16. NuliBlog 推荐工作流程 ## 9. 使用分支开发并合并到主线 ### 9.1 查看本地分支 ``` bash git branch ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `branch` | 子命令 | 管理分支;不加其他参数时列出本地分支 | 当前所在分支前面会有 `*` 标记。 ### 9.2 创建并切换到功能分支 ``` bash git switch -c feature/article-toc ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `switch` | 子命令 | 切换当前工作分支 | | `-c` | 选项 | create 的缩写,创建分支并切换过去 | | `feature/article-toc` | 分支名参数 | 新分支名称;`feature` 是命名习惯,不是 Git 命令 | ### 9.3 切回主线 ``` bash git switch main ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `switch` | 子命令 | 切换分支 | | `main` | 分支名参数 | 目标分支名称 | 切换前应确认工作区没有未妥善处理的修改。 ### 9.4 将功能分支推送到 GitHub ``` bash git push -u origin feature/article-toc ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `push` | 子命令 | 推送提交 | | `-u` | 选项 | 设置上游跟踪关系 | | `origin` | 远程别名 | 目标远程仓库 | | `feature/article-toc` | 分支名参数 | 要推送的本地分支 | ### 9.5 通过 Pull Request 合并 在 GitHub 网页上: 1. 选择刚推送的功能分支,或点击 **Compare & pull request**。 2. 确认 `base` 是 `main`,`compare` 是 `feature/article-toc`。这表示将功能分支的改动申请合并到 main。 3. 填写标题和说明,描述修改内容、测试情况和已知问题。 4. 检查 **Files changed**,确认没有密钥、临时文件或不相关修改。 5. 点击 **Create pull request**。 6. 检查通过后点击 **Merge pull request**,选择合适的合并方式。 Pull Request 是 GitHub 提供的协作审核流程;个人开发者也可以用它来检查合并内容。 ### 9.6 合并后更新本地主线 ``` bash git switch main git pull ``` 第一条切换到 main,第二条获取并整合 GitHub 上已经合并的最新内容。 ### 9.7 删除已经合并的本地功能分支 ``` bash git branch -d feature/article-toc ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `branch` | 子命令 | 管理分支 | | `-d` | 选项 | 安全删除已合并分支;若尚未合并,Git 通常会阻止删除 | | `feature/article-toc` | 分支名参数 | 要删除的本地分支 | 删除分支不会删除已经合并到 main 的提交历史。 ### 9.8 合并冲突 如果 main 和功能分支都修改了同一段代码,合并时可能发生冲突。 处理原则: 1. 查看 Git 标记的冲突文件。 2. 打开文件,判断应保留哪部分内容。 3. 删除冲突标记,保存正确代码。 4. 运行测试。 5. 使用 `git add 冲突文件路径` 标记冲突已解决。 6. 如果在本地执行 Merge,按 Git 提示完成 Commit;如果通过 GitHub PR 合并,则解决后推送更新。 不要在不了解差异的情况下盲目选择”全部接受当前”或”全部接受传入”。 ## 10. Tag 与 Release:管理正式版本 分支用于持续开发;Tag 用于标记一个固定提交;Release 用于发布版本说明和可下载文件。 ### 10.1 版本号示例 | 版本号 | 可以代表的阶段 | | --- | --- | | `v0.1.0` | 项目基本结构完成 | | `v0.5.0` | 核心页面和移动端适配完成 | | `v0.9.0` | 候选发布版本,进入集中测试 | | `v1.0.0` | 第一个正式稳定版本 | | `v1.0.1` | 修复问题,不改变主要功能 | | `v1.1.0` | 增加向后兼容的新功能 | ### 10.2 创建轻量标签 ``` bash git tag v1.0.0 ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `tag` | 子命令 | 创建、列出或删除标签 | | `v1.0.0` | 标签名参数 | 版本标签名称,不是 Git 子命令 | ### 10.3 创建带说明的附注标签 ``` bash git tag -a v1.0.0 -m "NuliBlog stable release 1.0.0" ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `tag` | 子命令 | 管理标签 | | `-a` | 选项 | 创建 annotated tag(附注标签) | | `v1.0.0` | 标签名参数 | 标签名称 | | `-m` | 选项 | 指定标签说明文字 | | `"NuliBlog stable release 1.0.0"` | 参数值 | 标签说明 | ### 10.4 推送指定标签 ``` bash git push origin v1.0.0 ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `push` | 子命令 | 推送本地引用到远程 | | `origin` | 远程别名 | 目标远程仓库 | | `v1.0.0` | 标签名参数 | 要推送的标签 | ### 10.5 GitHub 的 ZIP 压缩包从哪里来? 推送 Tag 后,GitHub 通常会为该 Tag 自动提供: - **Source code (zip)** - **Source code (tar.gz)** 这些源码归档由 GitHub 根据 Tag 指向的提交生成,不是本地自动生成的 ZIP 文件,也不需要额外上传。 自动源码归档通常包含该提交中 Git 跟踪的文件快照,不包含 `.git` 版本数据库,也不包含未提交、未跟踪或被忽略的本地文件。 如果需要在本地生成 ZIP,可以使用: ``` bash git archive --format=zip --output=../NuliBlog-v1.0.0.zip v1.0.0 ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `archive` | 子命令 | 将指定版本的文件归档 | | `--format=zip` | 选项 | 指定 ZIP 格式 | | `--output=...` | 选项 | 指定输出文件路径 | | `../NuliBlog-v1.0.0.zip` | 路径参数 | 示例输出路径;`..` 表示上一级目录 | | `v1.0.0` | 标签参数 | 指定打包哪个 Tag | GitHub 自动生成的源码 ZIP 与自行制作的部署 ZIP 不一定相同。部署包可以按实际部署需要筛选文件,但必须避免遗漏运行所需文件。 ### 10.6 创建 GitHub Release 在 GitHub 仓库的 **Releases** 页面: 1. 选择 **Draft a new release**。 2. 选择已经推送的 Tag。 3. 填写版本标题和更新说明。 4. 如有需要,上传经过整理的部署包、固件或其他附件。 5. 发布 Release。 建议先测试,再为稳定提交打 Tag。GitHub 自动提供源码归档,不代表该版本已经通过测试。 ## 11. 查看差异、撤销修改和恢复版本 ### 11.1 查看精简提交历史 ``` bash git log --oneline ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `log` | 子命令 | 查看提交历史 | | `--oneline` | 选项 | 每个提交压缩为一行显示 | ### 11.2 查看某次提交的详细内容 ``` bash git show a1b2c3d ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `show` | 子命令 | 显示提交、标签等对象的详细信息 | | `a1b2c3d` | 提交参数 | 提交 ID 的示例缩写,应替换为真实提交编号 | ### 11.3 从暂存区移出,但保留本地修改 ``` bash git restore --staged style.css ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `restore` | 子命令 | 恢复文件内容或暂存状态 | | `--staged` | 选项 | 针对暂存区操作;这里表示撤销暂存 | | `style.css` | 路径参数 | 要撤销暂存的文件 | 该命令会把文件从暂存区移出,但保留工作区修改。 ### 11.4 用 Revert 安全撤销一个已提交版本 ``` bash git revert a1b2c3d ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `revert` | 子命令 | 通过新增提交反向撤销指定提交的改动 | | `a1b2c3d` | 提交参数 | 要撤销的提交编号示例 | `git revert` 不删除原提交,而是创建一个新的 Commit 来抵消指定提交的效果。对于已经推送到 GitHub 的提交,这通常比改写历史更安全。 ### 11.5 两个需要特别谨慎的命令 ``` bash # 高风险:丢弃工作区和暂存区的未提交改动 git reset --hard # 高风险:强制覆盖远程分支历史 git push --force ``` | 命令片段 | 含义 | | --- | --- | | `reset` | 移动当前分支或重置暂存区、工作区 | | `--hard` | 将 HEAD、暂存区和工作区强制重置到目标提交;未提交改动可能丢失 | | `push` | 推送到远程仓库 | | `--force` | 强制更新远程引用,可能覆盖远程历史 | 初学阶段不要把 `reset --hard` 和 `push --force` 当作日常回退方法。优先考虑备份、`git restore`、`git stash` 或 `git revert`。 ## 12. GitHub Desktop 图形界面 GitHub Desktop 是官方图形化工具,可以与 Git Bash 交替使用。两者操作的是同一个本地 Git 仓库,不会形成两套独立的版本历史。 官方下载:
| GitHub Desktop 界面 / 操作 | 对应 Git 概念或命令 | 用途 | | --- | --- | --- | | Add an Existing Repository | 打开已有本地仓库 | 将已经初始化的项目添加到 Desktop 管理 | | Create a New Repository | `git init` | 在指定目录新建仓库 | | Publish repository | 添加 remote 并 push | 将本地仓库发布到 GitHub | | Changes | `git status` / `git diff` | 查看文件改动和逐行差异 | | Summary + Commit to … | `git add` + `git commit` | 填写说明并创建本地提交 | | Push origin | `git push` | 将本地提交上传到 GitHub | | Fetch origin / Pull origin | `git fetch` / `git pull` | 检查或获取远程更新 | | Current Branch \> New Branch | `git switch -c` | 创建并切换到新分支 | | Merge into current branch | `git merge` | 把选定分支合并到当前分支 | | History | `git log` | 查看提交历史 | 推荐的图形界面操作: 1. 打开 GitHub Desktop,并登录 GitHub 账号。 2. 选择 **File → Add Local Repository**,选择项目仓库目录。 3. 在 **Changes** 页面检查每个文件的差异。 4. 在 Summary 输入本次提交说明。 5. 点击 **Commit to main** 或当前分支名称。 6. 点击 **Push origin**,把提交上传到 GitHub。 7. 开发新功能时,通过 **Current Branch** 创建新分支。 8. 功能完成后推送分支,并在 GitHub 网页发起 Pull Request。 ## 13. .gitignore 与项目安全 `.gitignore` 是一个普通文本文件,放在仓库根目录,用于告诉 Git 哪些尚未跟踪的文件或目录通常不需要纳入版本管理。文件名必须是 `.gitignore`,不要误存为 `.gitignore.txt`。 示例: ``` gitignore # Windows / macOS 系统杂项 Thumbs.db .DS_Store # 编辑器个人配置(是否保留按项目需要决定) .vscode/ .idea/ # 日志和临时文件 *.log *.tmp # 本地环境变量和密钥配置 .env .env.* !.env.example # 常见缓存目录(请按项目实际情况确认) cache/ tmp/ ``` ### 13.1 不要盲目忽略博客上传目录 博客上传目录可能保存文章引用的图片和附件。若将其加入 `.gitignore`,Git 不会跟踪这些文件;如果这些文件是网站内容资产,应使用独立、可靠的文件备份方案。 ### 13.2 .gitignore 对已经跟踪的文件有什么影响? `.gitignore` 主要对尚未纳入版本管理的文件生效。如果某个密钥文件已经被 Commit 跟踪,后来再把它写入 `.gitignore`,Git 不会自动停止跟踪。 可以使用: ``` bash git rm --cached config/local-secret.php ``` | 命令片段 | 类型 | 含义 | | --- | --- | --- | | `git` | 程序命令 | 启动 Git | | `rm` | 子命令 | 从 Git 索引和工作区移除文件 | | `--cached` | 选项 | 只从 Git 索引移除,不删除本地工作区文件 | | `config/local-secret.php` | 路径参数 | 需要停止跟踪的文件路径 | 之后还应把该文件路径加入 `.gitignore`。 > **密钥泄露处置:** 如果密钥曾经提交并推送到 GitHub,仅删除文件或加入 `.gitignore` 不足以消除风险。应立即在对应服务中撤销或轮换密钥,并评估是否需要清理仓库历史。不要继续使用已经泄露的密钥。 ### 13.3 代码仓库不能代替完整备份 对于网站项目,建议区分: - **Git 管理**:主题、插件、自定义代码、项目文档。 - **数据库备份**:文章、用户、评论、设置等数据库内容。 - **附件备份**:用户上传的图片、附件和媒体文件。 - **生产环境配置**:服务器配置、证书、对象存储密钥等,应单独安全管理。 正式部署前,应备份线上文件和数据库。Git 合并成功不代表线上部署一定成功。 ## 14. Git 常用命令速查 | 命令 | 作用 | 使用时机 | | --- | --- | --- | | `git --version` | 查看 Git 版本 | 检查安装 | | `git config --global --list` | 查看全局配置 | 检查名称和邮箱 | | `git init` | 初始化仓库 | 开始管理本地项目 | | `git status` | 查看状态 | 操作前后检查 | | `git add .` | 暂存当前目录改动 | 准备提交 | | `git add 文件名` | 暂存指定文件 | 选择性提交 | | `git commit -m "说明"` | 创建提交 | 保存本地版本 | | `git diff` | 查看未暂存差异 | 检查修改内容 | | `git log --oneline` | 查看精简历史 | 查找提交编号 | | `git branch` | 查看本地分支 | 确认当前分支 | | `git switch -c feature/xxx` | 创建并切换分支 | 开发新功能 | | `git switch main` | 切换到主线 | 回到 main | | `git remote -v` | 查看远程地址 | 检查 GitHub 关联 | | `git push -u origin main` | 首次推送并设置上游 | 首次上传主线 | | `git push` | 推送提交 | 同步本地提交 | | `git pull` | 拉取并整合远程更新 | 同步远程修改 | | `git fetch` | 获取远程更新但不自动合并 | 先检查远程变化 | | `git clone URL` | 克隆远程仓库 | 在新电脑获取项目 | | `git merge feature/xxx` | 合并指定分支到当前分支 | 完成功能开发 | | `git tag -a v1.0.0 -m "说明"` | 创建附注标签 | 标记正式版本 | | `git push origin v1.0.0` | 推送指定标签 | 将版本标签上传 | | `git revert
` | 新增撤销提交 | 安全撤销已提交改动 | | `git restore --staged 文件名` | 撤销暂存但保留修改 | 误执行 git add 时 | | `git stash push -u -m "说明"` | 暂存当前改动 | 临时切换任务 | | `git archive --format=zip ...` | 生成指定版本的 ZIP | 制作源码归档 | ## 15. Git 命令中的英文单词与参数说明 ### 15.1 Git 命令的基本结构 ``` text git <子命令> [选项] [参数] ``` | 组成部分 | 说明 | 示例 | | --- | --- | --- | | `git` | 启动 Git 程序 | `git status` | | 子命令 | 指定操作类型 | `init`、`status`、`add`、`commit`、`push` | | 选项 | 改变子命令行为,通常以 `-` 或 `--` 开头 | `--global`、`-m`、`-u` | | 参数 | 为命令提供目标或内容 | `main`、`origin`、文件路径、仓库 URL | | 引号中的文字 | 用户填写的说明或含空格的参数值 | `"first commit"` | 并不是 `git` 后面的每个英文词都是子命令。有些是选项,有些是分支名、文件路径或普通参数。 ### 15.2 常见 Git 子命令 | 英文 | 中文含义 / 词源 | 在 Git 中的用途 | | --- | --- | --- | | `init` | initialize:初始化 | 创建新的本地仓库 | | `config` | configuration:配置 | 读取或修改 Git 配置 | | `status` | 状态 | 显示工作区、暂存区和分支状态 | | `add` | 添加 | 把文件改动加入暂存区 | | `commit` | 提交、确认 | 创建一次版本记录 | | `diff` | difference:差异 | 比较文件或提交之间的差异 | | `log` | 日志、记录 | 查看提交历史 | | `branch` | 分支 | 列出、创建、重命名或删除分支 | | `switch` | 切换 | 切换当前分支 | | `remote` | 远程的 | 管理远程仓库地址 | | `push` | 推送 | 把本地提交上传到远程仓库 | | `pull` | 拉取 | 获取远程更新并整合到当前分支 | | `fetch` | 获取 | 获取远程对象和引用,但不自动合并到当前分支 | | `clone` | 克隆 | 复制远程仓库及其历史到本地 | | `merge` | 合并 | 把其他分支整合到当前分支 | | `tag` | 标签 | 给特定提交标记名称 | | `show` | 显示 | 显示提交、标签等对象的详细信息 | | `restore` | 恢复 | 恢复文件内容或暂存状态 | | `revert` | 反转、撤销 | 通过新提交反向撤销之前提交的效果 | | `rm` | remove:移除 | 从 Git 跟踪或工作区移除文件 | | `stash` | 暂存、存放 | 临时保存尚未提交的改动 | | `archive` | 归档 | 将指定提交或标签中的文件导出为归档文件 | ### 15.3 常见选项、参数和符号 | 单词 / 符号 | 类型 | 具体含义 | | --- | --- | --- | | `--global` | 选项 | 设置当前系统用户级配置,不是 Git 子命令 | | `--list` | 选项 | 列出配置项 | | `--version` | 选项 | 显示 Git 版本 | | `-m` | 选项 | message,指定 Commit 或 Tag 的说明文字 | | `-u` | 选项 | push 中是 `--set-upstream` 的简写,建立上游跟踪关系 | | `-v` | 选项 | verbose,显示更详细的信息 | | `-c` | 选项 | switch 中表示创建分支并切换 | | `-d` | 选项 | branch 中安全删除已合并分支 | | `-M` | 选项 | branch 中强制重命名分支 | | `-a` | 选项 | tag 中创建附注标签 | | `--staged` | 选项 | restore 中指定对暂存区操作 | | `--worktree` | 选项 | restore 中指定对工作区操作 | | `--cached` | 选项 | rm 中只从 Git 索引移除,不删除本地文件 | | `--oneline` | 选项 | log 中将每条提交压缩成一行 | | `--format=zip` | 选项 | archive 中指定 ZIP 格式 | | `--output=路径` | 选项 | 指定归档文件输出位置 | | `--force` | 选项 | 强制执行;使用不当可能覆盖远程历史 | | `--hard` | 选项 | reset 中将工作区和暂存区强制重置到目标提交 | | `.` | 路径参数 | 当前目录,常用于 `git add .` | | `main` | 分支名参数 | 主分支名称,不是 Git 子命令 | | `origin` | 远程别名 | 本地给远程仓库起的惯用名称,不是 Git 子命令 | | `feature/xxx` | 分支名参数 | 功能分支示例名称,不是 Git 命令 | | `v1.0.0` | 标签名参数 | 版本标签名称,不是 Git 命令 | | `URL` | 地址参数 | 远程 Git 仓库地址 | ### 15.4 Fetch、Pull 和 Push 的区别 | 单词 | 含义 | 记忆方式 | | --- | --- | --- | | `fetch` | 获取远程更新和对象,不自动合并到当前分支 | 先取回来,暂不整合 | | `pull` | 获取远程更新并整合到当前分支 | 取回来并更新当前分支 | | `push` | 把本地提交发送到远程仓库 | 把本地提交推上去 | ### 15.5 GitHub 常见英文界面词汇 | 英文 | 中文含义 | 说明 | | --- | --- | --- | | Repository | 仓库 | 项目代码和版本历史的容器 | | New repository | 新建仓库 | 在 GitHub 创建远程仓库 | | Private | 私有 | 只有获得授权的用户可以访问 | | Public | 公开 | 任何人都可以访问仓库内容 | | Branch | 分支 | 独立开发路线 | | Pull Request | 拉取请求 / 合并请求 | 申请把一个分支合并到另一个分支 | | Compare | 比较 | 比较两个分支或提交的差异 | | Merge | 合并 | 把修改整合到目标分支 | | Commit | 提交 | 一次版本记录 | | History | 历史 | 提交记录列表 | | Release | 发布 | 对外发布一个版本及其说明、附件 | | Assets | 附件 / 资源 | Release 页面可下载的文件 | | Issues | 问题 / 事项 | 记录 Bug、建议和待办 | | Clone | 克隆 | 把远程仓库复制到本地 | | Fork | 派生仓库 | 在自己的账号下创建另一个仓库副本,常用于开源协作 | ## 16. NuliBlog 推荐工作流程 ### 16.1 首次建立仓库 ``` bash # 1. 配置 Git git config --global user.name "Developer" git config --global user.email "developer@example.com" # 2. 进入项目目录(Git Bash 示例) cd /d/Projects/NuliBlog # 3. 初始化仓库 git init # 4. 检查项目状态 git status # 5. 确认 .gitignore 已建立并检查文件 git add . git status # 6. 创建首次提交 git commit -m "Initial commit: NuliBlog" # 7. 关联 GitHub 远程仓库 git remote add origin https://github.com/用户名/NuliBlog.git # 8. 确保主分支名为 main git branch -M main # 9. 首次推送 git push -u origin main ``` ### 16.2 每次开发新功能 ``` bash # 1. 回到主线 git switch main # 2. 获取远程最新内容 git pull # 3. 创建功能分支 git switch -c feature/本次功能 # 4. 修改项目代码后检查状态和差异 git status git diff # 5. 暂存改动 git add . # 6. 创建提交 git commit -m "feat: add a new feature" # 7. 首次推送该功能分支 git push -u origin feature/本次功能 ``` 随后在 GitHub 网页创建 Pull Request,检查修改并合并到 main。 ### 16.3 合并后同步本地主线 ``` bash git switch main git pull ``` 确认功能已经合并到 main,并完成必要测试。 ### 16.4 正式发布 ``` bash # 为当前稳定提交创建附注标签 git tag -a v1.0.0 -m "NuliBlog stable release 1.0.0" # 将标签推送到 GitHub git push origin v1.0.0 ``` 之后在 GitHub Releases 页面基于该 Tag 创建 Release,填写更新说明,并按需要上传经过筛选的部署包。 ### 16.5 推荐的日常原则 1. **先检查,再暂存。** 使用 `git status` 和 `git diff` 检查 AI 或人工修改的内容。 2. **先提交,再推送。** Commit 保存本地版本,Push 同步到 GitHub。 3. **功能开发使用独立分支。** 避免未经测试的修改直接影响稳定主线。 4. **测试通过后再合并。** Pull Request 可用于检查改动。 5. **发布前创建 Tag。** Tag 用于标记一个明确的稳定版本。 6. **代码与网站数据分开备份。** Git 管理代码历史,不能代替数据库、上传附件和生产服务器的独立备份。 7. **保护敏感信息。** 不要把密码、API Key、私钥或生产环境机密提交到仓库。 ------------------------------------------------------------------------ **总结:** Git 通过 Commit 保存历史版本,通过 Branch 管理不同开发路线,通过 HEAD 确定当前工作区对应的位置;GitHub 则提供远程托管、Pull Request 和 Release 等协作能力。掌握这套机制后,无论是网站、博客主题、插件还是其他软件项目,都可以使用相同的版本管理方法。
文章关键词
git
github
入门
版本管理
主线管理
分支管理
发表评论
让交流带来新的灵感
取消回复
友善表达,认真交流