希望本贴能从零开始带您一起学习如何使用 Git 进行版本控制,并结合远程仓库 GitHub。这会是一个循序渐进的指南,我们开始吧!
学习 Git 和 GitHub 的路线图:
- 理解核心概念:什么是版本控制?Git 是什么?GitHub 是什么?
- 安装 Git
- 配置 Git
- 本地仓库操作:创建仓库、暂存、提交、查看历史、分支、合并
- GitHub 远程仓库操作:注册 GitHub、创建远程仓库、连接本地与远程、推送、克隆、拉取
- 基本协作流程 (简介):Fork、Pull Request
- 好习惯和下一步
- 视频教程 (可视化git很推荐):Git + GitHub 10分钟完全入门
- 安装教程 (非常推荐):Git 详细安装教程(详解 Git 安装过程每一步)
第一部分:理解核心概念
-
什么是版本控制 (Version Control System, VCS)?
- 想象一下你在写一篇重要的文档或代码。你可能会保存多个版本,比如
report_v1.doc
,report_v2.doc
,report_final.doc
,report_final_really_final.doc
。 - 版本控制系统就是一个能帮你自动追踪文件修改历史的工具。它记录了谁、在什么时候、对什么文件做了什么修改。
- 好处:
- 历史追溯:可以查看任何历史版本。
- 错误恢复:如果不小心改错了,可以轻松回滚到之前的某个版本。
- 团队协作:多人可以同时在同一个项目上工作,而不会互相覆盖对方的修改。
- 分支开发:可以创建“分支”来尝试新功能或修复 bug,而不影响主线开发。
- 想象一下你在写一篇重要的文档或代码。你可能会保存多个版本,比如
-
Git 是什么?
- Git 是目前世界上最先进、最流行的分布式版本控制系统。
- 分布式意味着每个开发者都拥有项目完整的历史副本,不像集中式版本控制系统那样需要时刻连接中央服务器。这使得离线工作和更快的操作成为可能。
- 它由 Linux 的创始人 Linus Torvalds 开发,最初是为了管理 Linux 内核的开发。
-
GitHub 是什么?
- GitHub 是一个基于网页的 Git 版本库托管服务。
- 它为你的 Git 仓库提供了一个远程存储空间,并提供了许多协作功能,如问题跟踪、代码审查 (Pull Requests)、项目管理等。
- 简单来说:Git 是工具,GitHub 是平台 (或服务)。你可以只在本地使用 Git,但结合 GitHub 可以更好地备份、分享和协作。
- 类似的平台还有 GitLab, Bitbucket 等。
第二部分:安装 Git
- Windows:
- 访问 https://git-scm.com/download/win 下载 Git for Windows。
- 具体可参考这篇全网最佳的Git安装教程 (非常推荐):
Git 详细安装教程(详解 Git 安装过程每一步)
* 运行安装程序,大部分选项保持默认即可。建议勾选 “run with bash” (在右键菜单中添加 Git Bash 选项) 和 “Add Git Bash for Windows Terminal” (如果你想在 终端 (Terminal) 或 命令提示符 (Command Prompt) 中使用)。
- macOS:
- 最简单的方式是安装 Xcode Command Line Tools。打开终端 (Terminal),输入
git --version
。如果没安装,系统会提示你安装。 - 或者通过 Homebrew 安装:
brew install git
- 也可以从 https://git-scm.com/download/mac 下载安装包。
- 最简单的方式是安装 Xcode Command Line Tools。打开终端 (Terminal),输入
- Linux (Debian/Ubuntu):
- 打开终端,输入:
sudo apt update && sudo apt install git
- 打开终端,输入:
- 验证安装:
- 安装完成后,打开终端 (Windows 用户可以使用 Git Bash),输入以下命令查看 Git 版本:
如果显示出版本号,说明安装成功。git --version
- 安装完成后,打开终端 (Windows 用户可以使用 Git Bash),输入以下命令查看 Git 版本:
第三部分:配置 Git
在你开始使用 Git 之前,需要设置你的用户名和邮箱地址。这些信息会附加到你的每一次提交 (commit) 中,用于标识是谁做的修改。
打开终端 (或 Git Bash),执行以下命令,将引号中的内容替换为你自己的信息:
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
--global
表示这个配置对你在这台电脑上的所有 Git 仓库都生效。- 你可以通过以下命令检查配置是否成功:
git config --list
第四部分:本地仓库操作
现在我们开始在你的电脑上使用 Git。
-
创建一个新项目文件夹 (或进入已有项目文件夹)
mkdir my-git-project # 创建一个名为 my-git-project 的文件夹 cd my-git-project # 进入该文件夹
-
初始化 Git 仓库 (
git init
)
在你的项目文件夹中,执行以下命令将其初始化为一个 Git 仓库:git init
这会在当前目录下创建一个隐藏的
.git
子目录,它包含了 Git 仓库的所有元数据和对象数据库。 -
Git 的三个区域 (重要概念)
- 工作区 (Working Directory):你实际看到和编辑文件的项目文件夹。
- 暂存区 (Staging Area / Index):一个特殊的文件,它保存了下次将要提交的文件列表信息。你可以选择性地将工作区的修改添加到暂存区。
- 本地仓库 (Local Repository / .git directory):Git 用来保存项目元数据和对象数据库的地方。当你执行
git commit
时,暂存区的文件快照会被永久地储存在本地仓库中。
基本流程是: 在工作区修改文件 -> 将修改添加到暂存区 -> 将暂存区的修改提交到本地仓库。
-
检查状态 (
git status
)
这个命令非常重要,它会告诉你当前仓库的状态:哪些文件被修改了?哪些文件在暂存区?等等。git status
刚初始化的仓库,它会提示你没有可提交的内容,但可能有未跟踪的文件。
-
创建和修改文件
现在,我们在项目里创建一个文件,比如readme.md
:echo "# My Awesome Project" > readme.md echo "This is a project to learn Git and GitHub." >> readme.md
再次运行
git status
,你会看到readme.md
被列为 “Untracked files” (未跟踪文件)。 -
添加到暂存区 (
git add
)
要让 Git 开始追踪这个文件并准备提交它的当前版本,你需要使用git add
命令。- 添加指定文件:
git add readme.md
- 添加所有已修改或新增的文件:
git add .
现在再运行
git status
,你会看到readme.md
被列为 “Changes to be committed” (待提交的更改)。 - 添加指定文件:
-
提交到本地仓库 (
git commit
)
将暂存区的内容提交到本地仓库,形成一个新的版本快照。每次提交都需要一个有意义的提交信息 (commit message),说明这次提交做了什么。git commit -m "Initial commit: Add readme.md"
-m
选项后面跟着的是提交信息。- 良好的提交信息非常重要!
现在运行
git status
,会提示 “nothing to commit, working tree clean” (没有东西要提交,工作区是干净的)。 -
查看提交历史 (
git log
)
查看项目的提交记录:git log
你会看到你刚才的提交,包含提交哈希值 (一个唯一的ID)、作者、日期和提交信息。
- 按
q
退出git log
的查看。 git log --oneline
会显示更简洁的日志。
- 按
-
进行更多修改并提交
让我们修改readme.md
并添加一个新文件main.py
。echo "More details about the project." >> readme.md echo "print('Hello, Git!')" > main.py
运行
git status
,你会看到readme.md
被修改 (modified),main.py
是未跟踪的。git add . # 或者 git add readme.md main.py git commit -m "Add main.py and update readme"
再次查看
git log --oneline
,你会看到两条提交记录。 -
分支 (Branching)
分支允许你在不影响主开发线 (通常是main
或master
分支) 的情况下进行开发、实验新功能或修复 bug。-
查看分支 (
git branch
):git branch
你会看到一个名为
main
(或master
) 的分支,并且前面有一个*
号,表示你当前所在的分支。 -
创建新分支 (
git branch <branch-name>
):git branch feature-login
这创建了一个名为
feature-login
的新分支,它基于你当前所在的分支。 -
切换分支 (
git checkout <branch-name>
或git switch <branch-name>
):
git switch
是较新的命令,推荐使用。git switch feature-login
现在你就在
feature-login
分支上了。git branch
会显示* feature-login
。 -
在分支上工作:
现在你在feature-login
分支上做的任何修改和提交都只属于这个分支,不会影响main
分支。echo "print('Login functionality')" > login.py git add login.py git commit -m "Add basic login feature structure"
-
-
合并分支 (
git merge
)
当你完成了在feature-login
分支上的工作,并且测试通过后,你可能想把它合并回main
分支。-
首先,切换回目标分支 (通常是
main
):git switch main
-
然后,执行合并命令:
git merge feature-login
Git 会尝试自动合并
feature-login
分支的更改到main
分支。- 如果顺利,
main
分支现在就包含了feature-login
的所有提交。 - 冲突 (Conflict):如果两个分支修改了同一个文件的同一部分,Git 可能无法自动合并,这时会发生冲突。你需要手动解决冲突,然后再次提交。 (解决冲突是进阶内容,这里先了解概念)
- 如果顺利,
-
删除已合并的分支 (可选):
一旦分支被合并并且不再需要,可以删除它:git branch -d feature-login
-
第五部分:GitHub 远程仓库操作
现在,我们将本地的 Git 仓库连接到 GitHub 上的远程仓库,以便备份、分享和协作。
-
注册 GitHub 账号
如果你还没有 GitHub 账号,请访问 https://github.com/ 注册一个。 -
在 GitHub 上创建新的远程仓库
- 登录 GitHub。
- 点击右上角的 “+” 号,选择 “New repository”。
- Repository name: 给你的仓库起个名字 (例如,
my-git-project
,最好和本地文件夹名一致,但非必需)。 - Description (optional): 简单描述你的项目。
- Public / Private: Public 仓库任何人都可以看到,Private 仓库只有你和你授权的人可以看到。初学建议 Public。
- Initialize this repository with:
- 不要勾选 “Add a README file”、“Add .gitignore” 或 “Choose a license”,因为我们本地已经有项目了,并且想把本地项目推送上去。如果勾选了,远程仓库会有初始提交,会和你本地仓库的初始提交不一致,导致推送复杂化。
- 点击 “Create repository”。
-
连接本地仓库到远程仓库 (
git remote add
)
创建仓库后,GitHub 会显示一些指令。找到 “…or push an existing repository from the command line” 部分,那里有你的远程仓库 URL (通常是 HTTPS 或 SSH 格式)。我们用 HTTPS 格式。在你的本地项目文件夹的终端中,执行:
git remote add origin https://github.com/YOUR_USERNAME/YOUR_REPOSITORY_NAME.git
- 将
YOUR_USERNAME
替换为你的 GitHub 用户名。 - 将
YOUR_REPOSITORY_NAME.git
替换为你在 GitHub 上创建的仓库名 (如my-git-project.git
)。 origin
是这个远程仓库的默认别名。你可以有多个远程仓库,并给它们不同的别名。
你可以用
git remote -v
查看已配置的远程仓库。 - 将
-
推送本地更改到远程仓库 (
git push
)
现在,将你本地main
分支的所有提交推送到 GitHub 上的origin
远程仓库。git push -u origin main
push
: 推送命令。-u
(或--set-upstream
): 这个选项会将本地的main
分支与远程的origin/main
分支关联起来。这样,以后你在这个分支上执行git push
或git pull
时,就不需要再指定远程仓库和分支名了。第一次推送时建议使用-u
。origin
: 远程仓库的别名。main
: 你要推送的本地分支名。
执行此命令时,Git 可能会提示你输入 GitHub 的用户名和密码 (或者 Personal Access Token,对于 HTTPS 而言,密码方式逐渐被弃用,推荐使用 Token)。
推送成功后,刷新你在 GitHub 上的仓库页面,就能看到你的文件和提交历史了!
-
克隆远程仓库 (
git clone
)
如果你想在另一台电脑上获取 GitHub 上的项目,或者你想获取别人的公开项目,可以使用git clone
。- 在 GitHub 上找到你想克隆的仓库。
- 点击绿色的 “Code” 按钮,复制 HTTPS 或 SSH URL。
- 在你的电脑上,打开终端,
cd
到你想要存放项目的目录下,然后执行:git clone https://github.com/SOMEONE_ELSE/SOME_REPOSITORY.git
这会将整个项目 (包括所有历史记录) 下载到你的电脑上,并自动设置好名为
origin
的远程仓库指向。 -
从远程仓库拉取更新 (
git pull
)
如果远程仓库有了新的提交 (比如你的同事推送了更新,或者你在 GitHub 网站上直接做了修改),你需要将这些更新拉取到你的本地仓库。
在你的本地项目文件夹中,确保你在正确的分支上 (例如main
):git pull origin main
如果之前推送时用了
-u
选项,可以简化为:git pull
git pull
实际上是git fetch
(从远程获取最新版本库数据) 和git merge
(将远程分支合并到当前本地分支) 两个命令的组合。
第六部分:基本协作流程 (简介)
当多人协作或参与开源项目时,通常会用到以下流程:
-
Fork (分叉):
- 如果你想为一个你没有直接写入权限的 GitHub 项目做贡献,你可以先 “Fork” 这个项目。
- Fork 操作会在你的 GitHub 账号下创建一个该项目的完整副本。
-
Clone (克隆):
- 将你 Fork 后的仓库 (即你账号下的那个副本) 克隆到你的本地电脑。
git clone https://github.com/YOUR_USERNAME/FORKED_REPOSITORY.git
-
创建分支、修改、提交、推送:
- 在你的本地仓库中创建一个新分支来进行修改。
- 完成修改后,提交到本地仓库。
- 将你的本地分支推送到你 Fork 的远程仓库 (即
origin
,指向你 GitHub 账号下的副本)。git push origin your-feature-branch
-
Pull Request (PR / 合并请求):
- 回到你 Fork 的 GitHub 仓库页面,你会看到一个提示,可以基于你刚推送的分支创建一个 “Pull Request”。
- Pull Request 是请求原项目维护者将你的修改合并到他们的主项目中。
- 在 PR 中,你可以描述你的修改,项目维护者可以审查你的代码,提出评论或要求修改,最终决定是否合并。
这是 GitHub 协作的核心。
第七部分:好习惯和下一步
- 频繁提交,提交信息清晰:
- 每次完成一个小功能或修复一个小 bug 就进行一次提交。
- 提交信息要清晰地描述你做了什么。例如:“Fix: User login button unresponsive” 或 “Feat: Add password reset functionality”。
- 经常拉取更新: 在开始新工作前,或准备推送前,先
git pull
获取远程最新代码,避免冲突。 - 使用分支: 不要直接在
main
分支上进行大量开发,为新功能、bug 修复等创建专门的分支。 - .gitignore 文件:
- 在项目中创建一个名为
.gitignore
的文件,列出那些你不想让 Git 追踪的文件或文件夹 (例如编译产生的文件、日志文件、IDE 配置文件、敏感信息如 API 密钥等)。 - 例如,一个 Python 项目的
.gitignore
可能包含:__pycache__/ *.pyc .env venv/
- GitHub 提供了很多语言和框架的
.gitignore
模板。
- 在项目中创建一个名为
下一步学习:
- 解决合并冲突
git rebase
(另一种合并分支的方式,可以使历史更线性)git stash
(临时保存未提交的更改)git reset
和git revert
(撤销提交)- 标签 (Tagging versions, e.g.,
v1.0
) - 更高级的 GitHub 功能 (Issues, Actions, Projects)
- Git GUI 客户端 (如 Sourcetree, GitHub Desktop, VS Code 自带的 Git 工具),它们可以提供图形化界面,有时更直观。
这是一个相当全面的入门指南。关键是动手实践!创建一个测试项目,按照上面的步骤一步步操作,多用 git status
和 git log
来观察变化。祝你学习愉快!遇到问题随时可以提问 GPT,通过与GPT多轮问答,可以学到几乎所有公开知识。