新手如何使用 GitHub:快速入门与实践指南
欢迎来到 GitHub 的世界!如果你刚刚接触编程、或者需要与团队协作、管理项目代码,那么 GitHub 几乎是一个不可或缺的工具。它不仅是一个代码托管平台,更是一个强大的协作、版本控制和社区交流中心。
对于新手来说,GitHub 可能看起来有些复杂,充斥着诸如 Repository、Commit、Branch、Pull Request 等术语。但请放心,本篇文章将带你一步步揭开它的神秘面纱,用最清晰、最详细的方式讲解如何从零开始使用 GitHub。
文章结构:
- GitHub 是什么?为什么需要使用它?
- 版本控制的概念
- Git 与 GitHub 的关系
- GitHub 的核心价值
- 准备工作:安装 Git 与注册 GitHub 账号
- 安装 Git
- 创建 GitHub 账号
- 核心概念速览
- Repository (仓库)
- Commit (提交)
- Branch (分支)
- Merge (合并)
- Pull Request (合并请求)
- Fork (派生)
- Clone (克隆)
- 本地 Git 环境配置
- 配置用户信息 (用户名和邮箱)
- 连接本地 Git 与 GitHub (SSH Key 或 HTTPS)
- 理解 SSH Key
- 生成并添加 SSH Key
- 使用 HTTPS
- 创建你的第一个仓库
- 在 GitHub 网站上创建
- 理解仓库初始化选项 (README, .gitignore, License)
- 基本的 Git 工作流程 (本地与远程交互)
- 克隆远程仓库 (
git clone
) - 进行代码修改
- 查看文件状态 (
git status
) - 暂存更改 (
git add
) - 提交更改 (
git commit
) - 将本地更改推送到 GitHub (
git push
) - 从 GitHub 拉取最新更改 (
git pull
)
- 克隆远程仓库 (
- 分支 (Branch) 的使用
- 为什么需要分支?
- 查看分支 (
git branch
) - 创建新分支 (
git branch <branch_name>
) - 切换分支 (
git switch <branch_name>
) - 合并分支 (
git merge <branch_name>
)
- 如何在 GitHub 上进行协作 (初步)
- 理解 Pull Request 的流程
- 创建 Pull Request
- 审查和合并 Pull Request
- GitHub 网站界面导览
- 主页和个人资料页
- 仓库页面详解 (Code, Issues, Pull Requests, Actions, etc.)
- 进阶之路与总结
- 推荐学习资源
- 总结与鼓励
1. GitHub 是什么?为什么需要使用它?
在你深入学习如何使用 GitHub 之前,了解它是什么以及它解决什么问题至关重要。
什么是版本控制?
想象一下,你在写一篇重要的文档,可能会不断修改、保存,并创建不同的版本:文档_v1.doc
、文档_v2_最终版.doc
、文档_v2_最终版_提交前修订.doc
… 这非常容易混乱,而且很难知道每个版本具体改了什么。
版本控制系统 (Version Control System, VCS) 就是为了解决这个问题而诞生的。它能帮助你:
- 追踪文件的历史变化: 记录每次修改的内容、时间和作者。
- 回溯到任意历史版本: 如果新改动出了问题,可以轻松回到之前的稳定状态。
- 并行开发: 多个人可以同时在项目的不同部分工作,而不会相互干扰。
- 合并各自的修改: 最后可以将大家的修改安全地整合在一起。
- 备份: 代码存储在一个中心位置(比如 GitHub),即使本地文件丢失,也能找回。
Git 是目前最流行的 分布式 版本控制系统。分布式意味着每个开发者电脑上都有一份完整的项目历史记录,这使得离线工作和分支操作变得更加便捷和强大。
Git 与 GitHub 的关系
这里有一个常见的误解:混淆 Git 和 GitHub。
- Git: 是一款 版本控制工具,它安装在你的本地电脑上。你使用 Git 的命令来管理你的代码版本、分支等。它是一个命令行工具。
- GitHub: 是一个基于 Git 的 在线代码托管平台。它提供了一个中心化的服务器,让开发者可以把他们的 Git 仓库上传到云端,方便团队协作、代码分享、项目管理等。除了代码托管,GitHub 还提供了 Issue Tracking(问题追踪)、Pull Requests(合并请求)、Code Review(代码审查)、Wiki、Pages 等一系列附加功能。
简单来说:Git 是你手中的工具,GitHub 是你存放工具产出并与他人协作的在线仓库和社区。 你可以在没有 GitHub 的情况下单独使用 Git 进行版本控制,但有了 GitHub,你的项目管理和协作效率将大大提升。
GitHub 的核心价值
- 代码托管与备份: 你的代码安全地存储在云端。
- 强大的版本控制: 利用 Git 的能力,轻松管理项目历史。
- 便捷的协作: 通过分支和 Pull Request 流程,多人协同开发变得有序高效。
- 代码分享与发现: 轻松分享你的开源项目,也能发现并学习他人的优秀代码。
- 项目管理: 利用 Issues 追踪 bug 和任务,利用 Projects 管理开发流程。
- 社区与生态: GitHub 是全球最大的开发者社区之一,你可以在这里找到无数开源项目、学习资源和开发者交流。
2. 准备工作:安装 Git 与注册 GitHub 账号
在开始使用 GitHub 之前,你需要完成两个基本步骤:安装 Git 和注册一个 GitHub 账号。
安装 Git
Git 需要安装在你的本地电脑上。安装过程相对简单:
-
Windows:
- 访问 Git 官网 (https://git-scm.com/download/win) 下载最新版本的 Git for Windows 安装程序。
- 运行安装程序。在安装过程中,大多数默认选项都是可以接受的,但注意以下几点(如果你不确定,选择推荐/默认选项即可):
- 选择组件时,确保选中 “Git Bash Here” 和 “Git GUI Here” (方便使用)。
- 调整你的 PATH 环境时,选择 “Git from the command line and also from 3rd-party software” 或类似的选项,这样你可以在任何终端窗口使用
git
命令。
- 安装完成后,打开命令提示符 (CMD) 或 PowerShell,输入
git --version
并回车。如果显示了 Git 的版本号,说明安装成功。
-
macOS:
- 安装 Xcode Command Line Tools (推荐): 打开终端,输入
git --version
并回车。系统会提示你安装 Command Line Tools,点击安装即可。这会安装 Git 和其他一些开发者工具。 - 使用 Homebrew (更灵活): 如果你安装了 Homebrew (一个 macOS 的包管理器),可以在终端输入
brew install git
来安装 Git。 - 安装完成后,打开终端,输入
git --version
并回车,检查是否安装成功。
- 安装 Xcode Command Line Tools (推荐): 打开终端,输入
-
Linux:
- 大多数 Linux 发行版都通过其包管理器提供 Git。
- Debian/Ubuntu: 打开终端,输入
sudo apt update && sudo apt install git
并回车。 - Fedora: 打开终端,输入
sudo dnf install git
并回车。 - CentOS/RHEL: 打开终端,输入
sudo yum install git
并回车。 - 安装完成后,打开终端,输入
git --version
并回车,检查是否安装成功。
安装完成后,你就拥有了在本地进行版本控制的能力。接下来,我们需要一个 GitHub 账号来与远程仓库交互。
创建 GitHub 账号
前往 GitHub 官网 (https://github.com/):
- 点击页面右上角的 “Sign up” 按钮。
- 按照提示填写必要信息:用户名 (Username)、邮箱地址 (Email address) 和密码 (Password)。选择一个容易记住但安全的密码。用户名是你在 GitHub 上的身份标识,也是你个人主页 URL 的一部分 (例如:
github.com/your_username
)。 - 完成人机验证。
- GitHub 可能会询问你一些关于你的兴趣和用途的问题,你可以选择性填写或跳过。
- 验证你的邮箱地址。GitHub 会发送一封邮件到你注册的邮箱,点击邮件中的链接来激活你的账号。
账号创建并验证成功后,你就拥有了访问 GitHub 平台并创建、参与项目的资格。
3. 核心概念速览
在实际操作之前,快速了解一些 GitHub (及 Git) 中常用的核心概念,有助于你更好地理解后续的步骤。
-
Repository (仓库 – Repo):
- 你可以将其视为一个项目的所有文件和该项目所有版本历史的集合。
- 一个仓库通常包含项目代码、文档、图片等一切相关文件。
- 每个项目通常对应一个独立的仓库。
- 仓库可以是公开的 (Public),任何人都可以查看;也可以是私有的 (Private),只有你或你邀请的人才能查看。
-
Commit (提交):
- 代表项目历史中的一个快照或一个里程碑。
- 当你对项目文件进行了修改并觉得这些修改是一个逻辑上的完整单元时,你就可以创建一个提交。
- 每次提交都会记录本次修改的内容、修改时间和提交者,并通常包含一条简短的提交信息 (Commit Message) 来描述本次提交的目的。
- 提交构成了项目的历史线。
-
Branch (分支):
- 可以理解为项目历史线的一个独立分叉。
- 默认的主分支通常叫做
main
(或旧称master
)。 - 当你在开发一个新功能或修复一个 bug 时,通常会创建一个新的分支,在上面进行修改,这样就不会影响主分支的稳定性。
- 分支使得并行开发成为可能,不同的开发者可以在不同的分支上同时工作。
-
Merge (合并):
- 将一个分支上的修改整合到另一个分支上的过程。
- 例如,当你完成了新功能分支的开发,并通过测试,就可以将这个分支合并到主分支
main
上。
-
Pull Request (合并请求 – PR):
- 这是 GitHub 平台上用于 代码审查 和 合并分支 的主要协作机制。
- 当你在一个分支上完成了一些工作,并希望将其合并到另一个分支 (通常是主分支) 时,你不是直接合并,而是创建一个 Pull Request。
- PR 会展示你所做的所有修改,并允许团队成员进行讨论、提出建议 (Code Review)。
- 在经过审查并确认无误后,Pull Request 最终会被接受并合并。
-
Fork (派生):
- 在 GitHub 上,Fork 的意思是在你自己的 GitHub 账号下创建一个已有仓库的完整副本。
- 这通常用于当你想要为一个开源项目贡献代码,但没有直接修改原仓库的权限时。
- 你可以 Fork 原仓库到你的账号下,然后在你 Fork 的仓库中进行修改,再通过 Pull Request 提交给原仓库的维护者。
-
Clone (克隆):
- 将 GitHub 上的一个远程仓库 完整地下载 到你的本地电脑。
- 克隆后,你在本地就拥有了这个仓库的所有文件和完整的版本历史。
- 这是开始在一个已有仓库上工作的第一步。
理解了这些概念,你就能更好地follow接下来的操作步骤。
4. 本地 Git 环境配置
安装 Git 后,你需要进行一些基本的配置,并设置本地 Git 与 GitHub 账号的连接。
配置用户信息 (用户名和邮箱)
这是 Git 全局配置的一部分,用于标识你在提交 (Commit) 中所做的修改。这些信息会随着你的每次提交记录在项目的历史中。
打开你的终端 (Git Bash on Windows, Terminal on macOS/Linux),输入以下命令:
bash
git config --global user.name "你的 GitHub 用户名"
git config --global user.email "你的 GitHub 注册邮箱"
注意:
- 将
"你的 GitHub 用户名"
替换成你在 GitHub 上注册的准确用户名。 - 将
"你的 GitHub 注册邮箱"
替换成你在 GitHub 上注册的准确邮箱地址。 --global
标志表示这些配置将应用于你电脑上所有 Git 仓库。如果你想为某个特定仓库设置不同的用户名/邮箱,可以进入该仓库目录后,去掉--global
标志执行命令。- 双引号是必须的,特别是当你的用户名或邮箱包含空格时。
配置完成后,你可以使用以下命令检查配置是否生效:
bash
git config --global user.name
git config --global user.email
连接本地 Git 与 GitHub (SSH Key 或 HTTPS)
为了让你能够在本地电脑上与 GitHub 上的仓库进行交互(例如,将本地代码推送到 GitHub,或者从 GitHub 拉取最新代码),你需要进行身份验证。GitHub 支持两种主要方式:HTTPS 和 SSH。
选择哪种方式?
- HTTPS: 配置简单,只需要在使用时输入你的 GitHub 用户名和密码(或者更安全的 Personal Access Token – PAT)。对于新手来说,可能是更快的入门方式。但每次交互可能都需要验证。
- SSH: 配置稍微复杂一些(需要生成密钥对),但一旦设置好,后续操作无需重复输入密码,更加方便和安全。推荐长期使用。
我们将详细介绍 SSH Key 的设置,并简要提及 HTTPS。
理解 SSH Key
SSH 使用一对密钥进行身份验证:一个私钥 (Private Key) 留在你的本地电脑上(绝不能泄露给任何人),一个公钥 (Public Key) 上传到 GitHub。当你尝试与 GitHub 通信时,GitHub 会使用你的公钥验证是否是你发起的连接,而你的本地 Git 会使用私钥进行加密响应。如果匹配成功,则身份验证通过。
设置 SSH Key (推荐)
-
检查是否已经存在 SSH Key:
打开终端,输入:
bash
ls -al ~/.ssh
查看输出列表中是否有id_rsa.pub
或id_ed25519.pub
等文件。如果看到了.pub
结尾的文件,说明可能已经存在 SSH Key。你可以选择使用现有的,或者生成新的。如果不存在该目录或文件,则需要生成新的。 -
生成新的 SSH Key:
在终端输入以下命令生成一个新的 SSH Key。推荐使用 Ed25519 算法,它比 RSA 更安全更高效。
bash
ssh-keygen -t ed25519 -C "你的 GitHub 注册邮箱"
如果你更喜欢 RSA 算法(兼容性可能更好一些,但安全性稍弱),可以使用:
bash
ssh-keygen -t rsa -b 4096 -C "你的 GitHub 注册邮箱"-t ed25519
或-t rsa -b 4096
指定加密算法和密钥长度。-C "你的 GitHub 注册邮箱"
为你的密钥添加一个注释,方便识别(通常使用你的邮箱)。
执行命令后,程序会询问你将密钥保存在哪里(默认是
~/.ssh/id_ed25519
或~/.ssh/id_rsa
),直接按回车接受默认位置通常是最好的选择。接着,程序会询问你设置一个密码 (passphrase)。强烈建议设置一个密码,这会为你的私钥提供额外的安全保护。每次使用 SSH 连接时都需要输入这个密码(但可以通过 ssh-agent 记住它,后面会讲)。如果你不想设置,直接按回车留空即可(不推荐)。
生成成功后,你会看到类似 “Your identification has been saved in /home/you/.ssh/id_ed25519” 和 “Your public key has been saved in /home/you/.ssh/id_ed25519.pub” 的信息。
-
将 SSH 私钥添加到 SSH 代理 (Agent):
SSH 代理会记住你的私钥密码,这样你在一个会话期间多次使用 SSH 连接时就无需重复输入密码了。- 启动 ssh-agent:
bash
eval "$(ssh-agent -s)" - 将你的私钥添加到 ssh-agent:
bash
ssh-add ~/.ssh/id_ed25519 # 如果你生成的是 RSA 密钥,请将文件名改为 ~/.ssh/id_rsa
如果之前设置了密码,此时会要求你输入该密码。
- 启动 ssh-agent:
-
复制 SSH 公钥:
你需要将.pub
结尾的公钥文件的内容复制下来,粘贴到 GitHub 上。- macOS:
pbcopy < ~/.ssh/id_ed25519.pub
(或id_rsa.pub
) - Linux:
xclip -sel clip < ~/.ssh/id_ed25519.pub
(或id_rsa.pub
) (可能需要先安装xclip
) 或cat ~/.ssh/id_ed25519.pub
(然后手动复制终端输出的内容)。 - Windows (Git Bash):
cat ~/.ssh/id_ed25519.pub
(或id_rsa.pub
) (然后手动复制终端输出的内容)。
- macOS:
-
将公钥添加到 GitHub 账号:
- 登录 GitHub。
- 点击右上角的你的头像,选择 “Settings”。
- 在左侧导航栏找到 “SSH and GPG keys”。
- 点击 “New SSH key” 按钮。
- 在 “Title” 字段给你的 Key 起个名字,方便自己区分(例如 “My Laptop Key”, “Work PC Key”)。
- 在 “Key” 字段粘贴你刚刚复制的公钥内容(以
ssh-ed25519 ...
或ssh-rsa ...
开头,以你的邮箱或注释结尾)。 - 点击 “Add SSH key”。GitHub 可能会要求你再次输入你的 GitHub 密码进行确认。
-
测试 SSH 连接:
打开终端,输入:
bash
ssh -T [email protected]
如果你是第一次连接,可能会看到一个提示,询问你是否信任该主机,输入yes
并回车。
如果一切顺利,你会看到类似 “Hi <你的 GitHub 用户名>! You’ve successfully authenticated, but GitHub does not provide shell access.” 的信息。这意味着你的本地 Git 已经成功通过 SSH 连接到了 GitHub。
使用 HTTPS (替代 SSH)
如果你觉得 SSH 设置太麻烦,也可以选择使用 HTTPS。
- 在使用
git clone
、git push
、git pull
等命令与远程仓库交互时,Git 会提示你输入 GitHub 的用户名和密码。 - 重要提示: 直接使用 GitHub 账号密码进行 HTTPS 验证已经被 GitHub 弃用,现在需要使用 Personal Access Token (PAT)。
- 登录 GitHub -> Settings -> Developer settings -> Personal access tokens -> Tokens (classic) -> Generate new token (classic).
- 给 token 起个名字,设置过期时间,并勾选必要的权限 (通常至少需要
repo
相关的权限)。 - 生成 token 后,复制 token 的值(它只会显示一次!)。
- 在 Git 命令行提示输入密码时,粘贴这个 PAT 作为密码。
- 为了避免每次都粘贴,你可以配置 Git 凭据管理器来记住 PAT。具体配置方式因操作系统而异,可以参考 GitHub 官方文档。
对于新手,我们强烈建议投入时间设置 SSH Key,因为这将为你后续的使用带来极大的便利和安全性。
5. 创建你的第一个仓库
现在你已经准备就绪了!让我们在 GitHub 上创建你的第一个仓库。
- 登录 GitHub。
- 点击页面左上角的绿色的 “New” 按钮 (或者右上角加号图标下的 “New repository”)。
-
进入创建新仓库页面:
- Owner: 默认为你的用户名。
- Repository name: 给你的仓库起一个名字(例如
my-first-repo
,hello-world
)。仓库名通常是小写字母和连字符组成,简洁明了。 - Description (Optional): 简要描述你的仓库是做什么的。这是一个好习惯。
- Public or Private:
- Public (公开): 任何人都可以查看这个仓库的代码。适合开源项目。
- Private (私有): 只有你和明确邀请的人才能查看。适合个人项目或私密团队项目。对于新手,可以选择 Private,等熟悉了再决定是否公开。
- Initialize this repository with: 这些是帮你快速初始化仓库的选项:
- Add a README file: 强烈建议勾选。README 文件通常是项目的介绍、使用说明、安装方法等,是他人了解你项目的第一站。勾选后 GitHub 会自动创建一个
README.md
文件。 - Add .gitignore: 如果你的项目会涉及特定编程语言或框架,这个文件可以帮助你忽略掉一些不需要上传到 Git 仓库的文件(例如编译生成的文件、日志文件、临时文件等)。勾选后可以选择一个适合你项目类型的
.gitignore
模板。对于新手,可以暂时不勾选,后面再手动添加和学习。 - Choose a license: 选择一个开源许可证(如果你的项目是公开的)。许可证规定了他人如何使用、修改和分发你的代码。对于私有仓库,或者不打算开源的项目,可以不选择。
- Add a README file: 强烈建议勾选。README 文件通常是项目的介绍、使用说明、安装方法等,是他人了解你项目的第一站。勾选后 GitHub 会自动创建一个
-
点击绿色的 “Create repository” 按钮。
恭喜!你已经在 GitHub 上成功创建了你的第一个远程仓库。现在,这个仓库还是空的(或者只包含 README、.gitignore 等文件,如果你初始化时勾选了)。接下来,我们需要将本地的代码与这个远程仓库连接起来。
6. 基本的 Git 工作流程 (本地与远程交互)
这是使用 Git 和 GitHub 的核心操作流程,涵盖了将本地代码同步到 GitHub 以及获取最新远程代码的步骤。
假设你已经在本地电脑上创建或拥有一个项目文件夹(例如,一个简单的网页项目、一个 Python 脚本集合等)。
克隆远程仓库 (git clone
)
如果你的项目是全新的,你首先需要将刚刚在 GitHub 上创建的仓库“克隆”到你的本地电脑。
- 在 GitHub 上找到你刚刚创建的仓库页面。
- 找到绿色的 “Code” 按钮,点击它。
-
你会看到克隆仓库的地址。选择 SSH 或 HTTPS 地址(取决于你之前设置的连接方式)。我们推荐使用 SSH。复制 SSH 地址(通常以
[email protected]:
开头)。- SSH 地址示例:
[email protected]:YourUsername/my-first-repo.git
- HTTPS 地址示例:
https://github.com/YourUsername/my-first-repo.git
- SSH 地址示例:
-
打开你的终端。
- 切换到你想要存放项目的目录(例如,使用
cd Documents/Projects
)。 -
执行克隆命令:
- 使用 SSH:
bash
git clone [email protected]:YourUsername/my-first-repo.git - 使用 HTTPS:
bash
git clone https://github.com/YourUsername/my-first-repo.git
将YourUsername
和my-first-repo
替换成你的实际用户名和仓库名。
- 使用 SSH:
执行命令后,Git 会在当前目录下创建一个与你仓库同名的文件夹(例如 my-first-repo
),并将远程仓库的内容下载到这个文件夹中。如果仓库是空的,文件夹里只会包含你初始化时勾选的 README 等文件。
现在,你的本地电脑上就有了这个 GitHub 仓库的一个本地副本,并且这个本地副本已经与远程仓库建立了连接。
进行代码修改
进入刚刚克隆下来的仓库文件夹:
bash
cd my-first-repo
现在,你可以像平时一样使用你喜欢的编辑器或IDE在这个文件夹中创建、修改、删除文件了。例如,你可以创建一个新的 HTML 文件 index.html
或修改 README.md
文件。
查看文件状态 (git status
)
在进行了一些修改后,你可能想知道哪些文件被修改了,哪些是新增的,以及它们的当前状态。
在仓库目录下打开终端,执行:
bash
git status
Git 会告诉你当前分支、哪些文件被修改了(列在 “Changes not staged for commit” 下面)以及哪些是新增的但还没有被 Git 追踪的(列在 “Untracked files” 下面)。
暂存更改 (git add
)
git status
显示的修改只是“工作区”的修改。在 Git 中,有一个“暂存区” (Staging Area)。在你提交之前,你需要将你想要包含在下一次提交中的修改添加到暂存区。
- 暂存某个特定文件:
bash
git add index.html # 添加 index.html 文件到暂存区 - 暂存多个文件:
bash
git add file1.txt file2.css - 暂存当前目录下所有修改和新增的文件:
bash
git add .
使用git add .
时要小心,确保你想要提交所有修改。
暂存后,再次运行 git status
,你会看到这些修改已经被移到 “Changes to be committed” 下面了。
提交更改 (git commit
)
暂存区的修改已经准备好了,现在可以将它们正式地记录到项目的历史中,形成一个提交 (Commit)。
bash
git commit -m "这里是你的提交信息"
-m
标志后面跟着你的提交信息。提交信息应该简短、清晰地描述本次提交的目的或内容。例如:”Add initial index.html structure” 或 “Fix typo in README”。- 一个好的提交信息非常重要,它能帮助你和团队成员理解项目历史中的每一个变化。
执行命令后,Git 会创建一个新的提交,并显示一些关于本次提交的信息(例如,修改了多少文件,插入或删除了多少行)。
现在,这个提交只存在于你的本地 Git 仓库中。
将本地更改推送到 GitHub (git push
)
提交完成后,你需要将本地的新提交发送到远程 GitHub 仓库,以便备份和与他人共享。
bash
git push origin main
origin
: 是远程仓库在你本地的别名,通常默认指向你克隆或关联的 GitHub 仓库。main
: 是你要推送的本地分支的名字。通常,主分支在 GitHub 上现在叫main
(以前是master
)。确保你推送到正确的远程分支。
如果你的本地分支和远程分支名字相同,并且你之前设置好了 SSH 或 HTTPS 验证,Git 会将你的本地提交上传到 GitHub 仓库的 main
分支上。
现在,打开你的 GitHub 仓库页面,刷新一下,你会看到你的新文件和修改已经出现在上面了!
从 GitHub 拉取最新更改 (git pull
)
当你和他人协作时,或者在不同的电脑上工作时,你的本地仓库可能不是最新的。你需要从远程仓库获取最新的修改并合并到你的本地仓库。
在你的本地仓库目录下执行:
bash
git pull origin main
origin
: 远程仓库的别名。main
: 你想要拉取的远程分支的名字。
git pull
命令实际上是两个操作的组合:
git fetch
: 从远程仓库下载最新的提交,但不合并到你当前的工作分支。git merge
: 将下载下来的远程分支的修改合并到你当前所在的本地分支。
所以 git pull origin main
的意思就是:从 origin
这个远程仓库的 main
分支下载最新提交,并将其合并到你当前所在的本地分支。
在你开始工作或推送你的更改之前,最好先 git pull
一下,确保你的本地仓库是最新的,避免潜在的合并冲突。
7. 分支 (Branch) 的使用
分支是 Git 中一个非常强大和常用的功能,它允许你在不影响项目主线开发的情况下,进行新功能的开发或 bug 的修复。
为什么需要分支?
想象一下,你和你的团队正在开发一个网站。主分支 (比如 main
) 上是已经发布且稳定的代码。现在你要开发一个全新的用户注册功能,这需要很多步骤,而且可能引入 bug。如果直接在 main
分支上开发,一旦出现问题,就会影响到正在运行的网站。
有了分支,你可以:
- 从
main
分支创建一个新的分支 (例如feature/user-registration
)。 - 在这个新分支上独立开发新功能,所有的提交都只影响这个分支。
- 主分支
main
依然保持稳定,可以用于发布或进行紧急 bug 修复。 - 当新功能开发完成并通过测试后,再将
feature/user-registration
分支的修改合并回main
分支。
分支常用命令
-
查看所有分支:
bash
git branch
当前所在的分支会有一个*
标记。 -
查看远程分支:
bash
git branch -r -
查看所有分支 (包括本地和远程):
bash
git branch -a -
创建新分支:
从当前所在的分支创建一个新的分支:
bash
git branch new-feature
这只创建了分支,你还停留在原来的分支上。 -
切换到已存在的某个分支:
bash
git switch new-feature
# 或者使用旧命令
# git checkout new-feature
切换分支后,你的工作区文件会变成该分支最新提交时的状态。 -
创建并立即切换到新分支:
这是非常常用的操作,一步到位:
bash
git switch -c new-feature
# 或者使用旧命令
# git checkout -b new-feature -
将某个分支的修改合并到当前所在的分支:
首先切换到你想要接收修改的分支(例如main
):
bash
git switch main
然后执行合并命令,指定要合并进来的分支:
bash
git merge new-feature
如果合并过程中没有冲突,Git 会自动完成合并,并创建一个新的合并提交。如果发生冲突,你需要手动解决冲突(这对于新手来说可能有点挑战,我们后续会提)。 -
删除本地分支:
注意:不能删除当前所在的分支。
bash
git branch -d new-feature # -d 是 --delete 的缩写,只能删除已经完全合并到当前分支的分支
git branch -D feature-with-unmerged-changes # -D 是 --delete --force 的缩写,强制删除,即使有未合并的提交(小心使用!) -
删除远程分支:
bash
git push origin --delete new-feature
# 或者
# git push origin :new-feature
删除远程分支通常在本地分支的工作已经完成并合并到主分支后进行。
分支使用建议:
- 保持主分支 (
main
) 整洁和稳定。 - 为每个新功能、bug 修复或实验性工作创建一个独立的分支。
- 给分支起一个有意义的名字(例如
feature/add-user-auth
,bugfix/login-error
,refactor/css-structure
)。 - 在开始工作前,确保你的新分支是基于最新的
main
分支创建的(先切换到main
并git pull
,然后再创建新分支)。 - 定期将你的功能分支推送到 GitHub (例如
git push origin new-feature
),即使工作没有完成,也可以作为备份。
8. 如何在 GitHub 上进行协作 (初步)
GitHub 的强大之处在于其协作功能。Pull Request (PR) 是实现这一目标的核心机制。
理解 Pull Request 的流程
PR 主要用于两种场景:
- 在团队内部协作: 你在自己的分支上完成工作,创建 PR 请求将你的分支合并到团队的主分支 (
main
)。团队成员可以审查你的代码,提出意见,确认无误后,由有权限的人合并你的 PR。 - 向开源项目贡献代码: 你 Fork 了别人的仓库,在你的 Fork 仓库上进行修改,然后创建 PR 向原仓库提交你的修改,请求他们将你的修改合并到他们的仓库中。
无论是哪种场景,核心流程类似:
- (如果你是为开源项目贡献,先 Fork 目标仓库到你的账号下)。
- 将仓库克隆到本地 (
git clone
)。 - 创建并切换到一个新的分支 (
git switch -c your-feature-branch
)。 - 在这个分支上进行你的修改、添加、删除文件。
- 暂存并提交你的修改 (
git add .
,git commit -m "..."
)。 - 将你的本地分支推送到你的 GitHub 仓库 (
git push origin your-feature-branch
)。 - 前往 GitHub 网站,进入你的仓库页面。GitHub 通常会检测到你刚刚推送的新分支,并提示你创建一个 Pull Request。如果没有提示,你可以手动点击 “Pull requests” 标签页,然后点击 “New pull request”。
- 选择要合并的源分支 (你的
your-feature-branch
) 和目标分支 (通常是原仓库的main
分支)。 - 填写 Pull Request 的标题和描述,清晰说明你做了什么以及为什么做。
- 提交 Pull Request。
- 目标仓库的维护者或团队成员会收到通知,他们可以查看你的修改,在 PR 页面下留言讨论,甚至提出修改建议。
- 在通过审查后,有权限的人会点击 “Merge pull request” 按钮,将你的修改合并到目标分支。
- 合并完成后,你的分支通常就不再需要了,可以在本地和远程将其删除。
创建 Pull Request (简单示例)
假设你在本地仓库创建并推送了一个名为 add-contact-page
的新分支。
- 在 GitHub 上打开你的仓库页面。
- 你会看到一个提示,比如 “add-contact-page had recent pushes less than a minute ago.” 旁边有个 “Compare & pull request” 按钮。点击它。
- 如果没看到提示,点击页面上方的 “Pull requests” 标签页,然后点击绿色的 “New pull request” 按钮。
- 在比较页面,确保 base 分支是
main
(你想要合并进去的分支),而 compare 分支是add-contact-page
(你做修改的分支)。 - 检查下方显示的代码修改差异 (diff)。
- 填写 Pull Request 的标题(必填)和详细描述(强烈推荐)。
- 可以添加评论者 (Reviewers)、指派任务给某人 (Assignees)、关联到某个问题 (Link issues) 等。
- 点击绿色的 “Create pull request” 按钮。
你的 Pull Request 现在已经创建并显示在仓库的 “Pull requests” 标签页下了。
审查和合并 Pull Request
如果你是仓库的维护者,或者你在自己的 PR 创建后想自己合并(比如在个人项目中),流程如下:
- 进入 Pull Request 页面。
- 查看代码修改 (Files changed 标签)。
- 如果需要,可以在特定行或整个 PR 上添加评论。
- 如果一切都没问题,页面下方会显示 “This branch has no conflicts with the base branch” (表示可以自动合并)。
- 点击绿色的 “Merge pull request” 按钮。
- 确认合并。
- 合并成功后,可以选择删除源分支 (Delete branch) 按钮,以保持仓库整洁。
通过 Pull Request,团队协作变得可视化、可讨论,并且代码质量得到了保障。
9. GitHub 网站界面导览
熟悉 GitHub 网站的界面对于高效使用它也很重要。以你的仓库页面为例:
-
Code 标签页 (默认):
- 显示仓库的当前文件和文件夹结构。
- 上方会显示当前分支 (例如
main
),可以切换分支。 - 左侧是文件列表,点击文件可以查看内容。
- 右侧文件列表上方有绿色的 “Code” 按钮,用于克隆、下载仓库。
- 文件列表下方有最近的提交信息。
README.md
文件内容通常会显示在页面底部。
-
Issues 标签页:
- 用于跟踪项目的 bug、任务、需求、想法等。
- 任何人(如果是公开仓库)或有权限的人可以创建 Issue。
- Issue 页面可以进行讨论、分配负责人、打标签、设置优先级等。
- 是管理项目待办事项和讨论具体问题的场所。
-
Pull Requests 标签页:
- 显示所有打开和已关闭的 Pull Request。
- 点击进入 PR 页面可以查看代码差异、评论、提交历史等。
- 是进行代码审查和合并的中心。
-
Actions 标签页:
- GitHub Actions 是一个持续集成/持续部署 (CI/CD) 服务。
- 你可以在这里设置自动化流程,例如代码提交后自动运行测试、自动部署网站等。对于新手来说,了解其存在即可,后续深入学习。
-
Projects 标签页:
- 提供看板式或表格式的项目管理工具。
- 可以将 Issues 和 Pull Requests 关联到 Projects 中的看板卡片上,用于可视化地管理项目进度。
-
Wiki 标签页:
- 一个简单的维基系统,用于编写项目的文档、教程等。
-
Security 标签页:
- 提供代码安全扫描、依赖项漏洞警告等功能。
-
Insights 标签页:
- 提供仓库的各种统计信息,如贡献者活动、代码频率、分支网络图等。
-
Settings 标签页:
- 仓库的各种设置,如修改仓库名称、可见性、管理协作者、设置分支保护规则、Webhook 等。
了解这些标签页的功能,可以帮助你更好地利用 GitHub 进行项目管理和协作。
10. 进阶之路与总结
恭喜你!通过以上步骤,你已经掌握了 GitHub 的核心概念和基本工作流程:创建仓库、克隆、修改、提交、推送、拉取、分支的基本使用以及 Pull Request 的概念。这已经足够让你开始使用 GitHub 来管理你的个人项目或参与简单的协作。
但这仅仅是一个开始,Git 和 GitHub 还有更多强大的功能等待你去探索:
- 解决合并冲突 (Merge Conflicts): 当两个分支合并时,如果同一文件的同一部分都有修改,就会发生冲突。学习如何识别和手动解决冲突是进阶的必修课。
.gitignore
文件的详细使用: 精确控制哪些文件不应该被 Git 追踪。- 更高级的分支策略: 了解 Git Flow 等流行的分支管理模型。
- Rebase vs Merge: 理解两种不同的合并方式及其适用场景。
- Git Stash: 暂时保存当前工作区的修改,以便切换到其他任务。
- Git Remote: 管理远程仓库的命令。
- Tagging: 给项目的某个重要提交(如发布版本)打标签。
- 使用 Git GUI 客户端: 如果对命令行不太适应,可以使用 GitHub Desktop、Sourcetree、GitKraken 等图形化工具来辅助操作。
- 深入学习 Pull Request 工作流: 代码审查的细节、PR 模板、Required Reviews 等。
- 探索 GitHub 的其他功能: Actions (CI/CD)、Pages (静态网站托管)、Gists (代码片段分享)、GitHub API 等。
总结与鼓励:
学习 Git 和 GitHub 需要时间和实践。一开始可能会遇到一些错误或困惑,这是正常的。不要害怕尝试和犯错,Git 的版本控制特性意味着你通常可以回退到之前的状态。
- 多练习: 在自己的小项目上反复练习克隆、修改、提交、推送、拉取和分支操作。
- 多查阅资料: Git 和 GitHub 都有非常详尽的官方文档,遇到问题时,搜索引擎或查阅文档是最好的方法。
- 参与社区: 查看开源项目是如何使用 GitHub 的,尝试为简单的项目贡献代码。
GitHub 是一个强大的工具,掌握它将极大地提升你的开发效率、协作能力和项目管理水平。坚持下去,你将成为一名更优秀的开发者!
祝你在 GitHub 的旅程中一切顺利!