从 Git 到 GitHub - 使用 Git 进行版本控制 - Git 常用命令

希望本贴能从零开始带您一起学习如何使用 Git 进行版本控制,并结合远程仓库 GitHub。这会是一个循序渐进的指南,我们开始吧!

学习 Git 和 GitHub 的路线图:

  1. 理解核心概念:什么是版本控制?Git 是什么?GitHub 是什么?
  2. 安装 Git
  3. 配置 Git
  4. 本地仓库操作:创建仓库、暂存、提交、查看历史、分支、合并
  5. GitHub 远程仓库操作:注册 GitHub、创建远程仓库、连接本地与远程、推送、克隆、拉取
  6. 基本协作流程 (简介):Fork、Pull Request
  7. 好习惯和下一步

第一部分:理解核心概念

  • 什么是版本控制 (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

  • 具体可参考这篇全网最佳的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 下载安装包。
  • Linux (Debian/Ubuntu) :
    • 打开终端,输入: sudo apt update && sudo apt install git
  • 验证安装 :
    • 安装完成后,打开终端 (Windows 用户可以使用 Git Bash),输入以下命令查看 Git 版本:

      bash 复制代码
      git --version

      如果显示出版本号,说明安装成功。


第三部分:配置 Git

在你开始使用 Git 之前,需要设置你的用户名和邮箱地址。这些信息会附加到你的每一次提交 (commit) 中,用于标识是谁做的修改。

打开终端 (或 Git Bash),执行以下命令,将引号中的内容替换为你自己的信息:

bash 复制代码
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
  • --global 表示这个配置对你在这台电脑上的所有 Git 仓库都生效。

  • 你可以通过以下命令检查配置是否成功:

    bash 复制代码
    git config --list

第四部分:本地仓库操作

现在我们开始在你的电脑上使用 Git。

  1. 创建一个新项目文件夹 (或进入已有项目文件夹)

    bash 复制代码
    mkdir my-git-project  # 创建一个名为 my-git-project 的文件夹
    cd my-git-project     # 进入该文件夹
  2. 初始化 Git 仓库 (git init)

    在你的项目文件夹中,执行以下命令将其初始化为一个 Git 仓库:

    bash 复制代码
    git init

    这会在当前目录下创建一个隐藏的 .git 子目录,它包含了 Git 仓库的所有元数据和对象数据库。

  3. Git 的三个区域 (重要概念)

    • 工作区 (Working Directory):你实际看到和编辑文件的项目文件夹。
    • 暂存区 (Staging Area / Index):一个特殊的文件,它保存了下次将要提交的文件列表信息。你可以选择性地将工作区的修改添加到暂存区。
    • 本地仓库 (Local Repository / .git directory) :Git 用来保存项目元数据和对象数据库的地方。当你执行 git commit 时,暂存区的文件快照会被永久地储存在本地仓库中。

    基本流程是: 在工作区修改文件 -> 将修改添加到暂存区 -> 将暂存区的修改提交到本地仓库。

  4. 检查状态 (git status)

    这个命令非常重要,它会告诉你当前仓库的状态:哪些文件被修改了?哪些文件在暂存区?等等。

    bash 复制代码
    git status

    刚初始化的仓库,它会提示你没有可提交的内容,但可能有未跟踪的文件。

  5. 创建和修改文件

    现在,我们在项目里创建一个文件,比如 readme.md

    bash 复制代码
    echo "# My Awesome Project" > readme.md
    echo "This is a project to learn Git and GitHub." >> readme.md

    再次运行 git status,你会看到 readme.md 被列为 "Untracked files" (未跟踪文件)。

  6. 添加到暂存区 (git add)

    要让 Git 开始追踪这个文件并准备提交它的当前版本,你需要使用 git add 命令。

    • 添加指定文件:

      bash 复制代码
      git add readme.md
    • 添加所有已修改或新增的文件:

      bash 复制代码
      git add .

    现在再运行 git status,你会看到 readme.md 被列为 "Changes to be committed" (待提交的更改)。

  7. 提交到本地仓库 (git commit)

    将暂存区的内容提交到本地仓库,形成一个新的版本快照。每次提交都需要一个有意义的提交信息 (commit message),说明这次提交做了什么。

    bash 复制代码
    git commit -m "Initial commit: Add readme.md"
    • -m 选项后面跟着的是提交信息。
    • 良好的提交信息非常重要!

    现在运行 git status,会提示 "nothing to commit, working tree clean" (没有东西要提交,工作区是干净的)。

  8. 查看提交历史 (git log)

    查看项目的提交记录:

    bash 复制代码
    git log

    你会看到你刚才的提交,包含提交哈希值 (一个唯一的ID)、作者、日期和提交信息。

    • q 退出 git log 的查看。
    • git log --oneline 会显示更简洁的日志。
  9. 进行更多修改并提交

    让我们修改 readme.md 并添加一个新文件 main.py

    bash 复制代码
    echo "More details about the project." >> readme.md
    echo "print('Hello, Git!')" > main.py

    运行 git status,你会看到 readme.md 被修改 (modified),main.py 是未跟踪的。

    bash 复制代码
    git add .  # 或者 git add readme.md main.py
    git commit -m "Add main.py and update readme"

    再次查看 git log --oneline,你会看到两条提交记录。

  10. 分支 (Branching)

    分支允许你在不影响主开发线 (通常是 mainmaster 分支) 的情况下进行开发、实验新功能或修复 bug。

    • 查看分支 (git branch):

      bash 复制代码
      git branch

      你会看到一个名为 main (或 master) 的分支,并且前面有一个 * 号,表示你当前所在的分支。

    • 创建新分支 (git branch <branch-name>):

      bash 复制代码
      git branch feature-login

      这创建了一个名为 feature-login 的新分支,它基于你当前所在的分支。

    • 切换分支 (git checkout <branch-name>git switch <branch-name>) :
      git switch 是较新的命令,推荐使用。

      bash 复制代码
      git switch feature-login

      现在你就在 feature-login 分支上了。git branch 会显示 * feature-login

    • 在分支上工作 :

      现在你在 feature-login 分支上做的任何修改和提交都只属于这个分支,不会影响 main 分支。

      bash 复制代码
      echo "print('Login functionality')" > login.py
      git add login.py
      git commit -m "Add basic login feature structure"
  11. 合并分支 (git merge)

    当你完成了在 feature-login 分支上的工作,并且测试通过后,你可能想把它合并回 main 分支。

    • 首先,切换回目标分支 (通常是 main):

      bash 复制代码
      git switch main
    • 然后,执行合并命令:

      bash 复制代码
      git merge feature-login

      Git 会尝试自动合并 feature-login 分支的更改到 main 分支。

      • 如果顺利,main 分支现在就包含了 feature-login 的所有提交。
      • 冲突 (Conflict):如果两个分支修改了同一个文件的同一部分,Git 可能无法自动合并,这时会发生冲突。你需要手动解决冲突,然后再次提交。 (解决冲突是进阶内容,这里先了解概念)
    • 删除已合并的分支 (可选) :

      一旦分支被合并并且不再需要,可以删除它:

      bash 复制代码
      git branch -d feature-login

第五部分:GitHub 远程仓库操作

现在,我们将本地的 Git 仓库连接到 GitHub 上的远程仓库,以便备份、分享和协作。

  1. 注册 GitHub 账号

    如果你还没有 GitHub 账号,请访问 https://github.com/ 注册一个。

  2. 在 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"。
  3. 连接本地仓库到远程仓库 (git remote add)

    创建仓库后,GitHub 会显示一些指令。找到 "...or push an existing repository from the command line" 部分,那里有你的远程仓库 URL (通常是 HTTPS 或 SSH 格式)。我们用 HTTPS 格式。

    在你的本地项目文件夹的终端中,执行:

    bash 复制代码
    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 查看已配置的远程仓库。

  4. 推送本地更改到远程仓库 (git push)

    现在,将你本地 main 分支的所有提交推送到 GitHub 上的 origin 远程仓库。

    bash 复制代码
    git push -u origin main
    • push: 推送命令。
    • -u (或 --set-upstream): 这个选项会将本地的 main 分支与远程的 origin/main 分支关联起来。这样,以后你在这个分支上执行 git pushgit pull 时,就不需要再指定远程仓库和分支名了。第一次推送时建议使用 -u
    • origin: 远程仓库的别名。
    • main: 你要推送的本地分支名。

    执行此命令时,Git 可能会提示你输入 GitHub 的用户名和密码 (或者 Personal Access Token,对于 HTTPS 而言,密码方式逐渐被弃用,推荐使用 Token)。

    推送成功后,刷新你在 GitHub 上的仓库页面,就能看到你的文件和提交历史了!

  5. 克隆远程仓库 (git clone)

    如果你想在另一台电脑上获取 GitHub 上的项目,或者你想获取别人的公开项目,可以使用 git clone

    • 在 GitHub 上找到你想克隆的仓库。

    • 点击绿色的 "Code" 按钮,复制 HTTPS 或 SSH URL。

    • 在你的电脑上,打开终端,cd 到你想要存放项目的目录下,然后执行:

      bash 复制代码
      git clone https://github.com/SOMEONE_ELSE/SOME_REPOSITORY.git

    这会将整个项目 (包括所有历史记录) 下载到你的电脑上,并自动设置好名为 origin 的远程仓库指向。

  6. 从远程仓库拉取更新 (git pull)

    如果远程仓库有了新的提交 (比如你的同事推送了更新,或者你在 GitHub 网站上直接做了修改),你需要将这些更新拉取到你的本地仓库。

    在你的本地项目文件夹中,确保你在正确的分支上 (例如 main):

    bash 复制代码
    git pull origin main

    如果之前推送时用了 -u 选项,可以简化为:

    bash 复制代码
    git pull

    git pull 实际上是 git fetch (从远程获取最新版本库数据) 和 git merge (将远程分支合并到当前本地分支) 两个命令的组合。


第六部分:基本协作流程 (简介)

当多人协作或参与开源项目时,通常会用到以下流程:

  1. Fork (分叉):

    • 如果你想为一个你没有直接写入权限的 GitHub 项目做贡献,你可以先 "Fork" 这个项目。
    • Fork 操作会在你的 GitHub 账号下创建一个该项目的完整副本。
  2. Clone (克隆):

    • 将你 Fork 后的仓库 (即你账号下的那个副本) 克隆到你的本地电脑。
    • git clone https://github.com/YOUR_USERNAME/FORKED_REPOSITORY.git
  3. 创建分支、修改、提交、推送:

    • 在你的本地仓库中创建一个新分支来进行修改。

    • 完成修改后,提交到本地仓库。

    • 将你的本地分支推送到你 Fork 的远程仓库 (即 origin,指向你 GitHub 账号下的副本)。

      bash 复制代码
      git push origin your-feature-branch
  4. 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 resetgit revert (撤销提交)
  • 标签 (Tagging versions, e.g., v1.0)
  • 更高级的 GitHub 功能 (Issues, Actions, Projects)
  • Git GUI 客户端 (如 Sourcetree, GitHub Desktop, VS Code 自带的 Git 工具),它们可以提供图形化界面,有时更直观。

这是一个相当全面的入门指南。关键是动手实践!创建一个测试项目,按照上面的步骤一步步操作,多用 git statusgit log 来观察变化。祝你学习愉快!遇到问题随时可以提问 GPT,通过与GPT多轮问答,可以学到几乎所有公开知识。

相关推荐
江梦寻1 小时前
软件工程教学评价
开发语言·后端·macos·架构·github·软件工程
掘金安东尼1 小时前
换了无数键盘、工学椅,却从没认真选过一块为程序员“注意力”设计的屏
前端·面试·github
qianmoQ5 小时前
GitHub 趋势日报(2025年06月10日)
github
牧野星辰6 小时前
.gitignore文件的规范
git·github
掘金安东尼6 小时前
从 0 构建 AI Demo?这份“云上 0 元清单”你值得拥有!
人工智能·面试·github
该用户已不存在8 小时前
懒人福音!ServBay+n8n,10分钟打造自己的小道消息
github·ai编程
独立开阀者_FwtCoder11 小时前
TypeScript 杀疯了,开发 AI 应用新趋势!
前端·javascript·github
二个半engineer12 小时前
GitLab Web 界面创建分支后pathspec ... did not match any file(s)
git·gitlab
寻月隐君13 小时前
bacon 点燃 Rust:比 cargo-watch 更爽的开发体验
后端·rust·github
尽兴-13 小时前
Git 清理指南:如何从版本库中移除误提交的文件(保留本地文件)
大数据·git·gitee·gitlab