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

发布于:2025-05-10 ⋅ 阅读:(13) ⋅ 点赞:(0)

希望本贴能从零开始带您一起学习如何使用 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 版本:
      git --version
      
      如果显示出版本号,说明安装成功。

第三部分:配置 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。

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

    mkdir my-git-project  # 创建一个名为 my-git-project 的文件夹
    cd my-git-project     # 进入该文件夹
    
  2. 初始化 Git 仓库 (git init)
    在你的项目文件夹中,执行以下命令将其初始化为一个 Git 仓库:

    git init
    

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

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

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

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

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

    git status
    

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

  5. 创建和修改文件
    现在,我们在项目里创建一个文件,比如 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” (未跟踪文件)。

  6. 添加到暂存区 (git add)
    要让 Git 开始追踪这个文件并准备提交它的当前版本,你需要使用 git add 命令。

    • 添加指定文件:
      git add readme.md
      
    • 添加所有已修改或新增的文件:
      git add .
      

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

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

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

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

  8. 查看提交历史 (git log)
    查看项目的提交记录:

    git log
    

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

    • q 退出 git log 的查看。
    • git log --oneline 会显示更简洁的日志。
  9. 进行更多修改并提交
    让我们修改 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,你会看到两条提交记录。

  10. 分支 (Branching)
    分支允许你在不影响主开发线 (通常是 mainmaster 分支) 的情况下进行开发、实验新功能或修复 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"
      
  11. 合并分支 (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 上的远程仓库,以便备份、分享和协作。

  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 格式。

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

    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 远程仓库。

    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 到你想要存放项目的目录下,然后执行:
      git clone https://github.com/SOMEONE_ELSE/SOME_REPOSITORY.git
      

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

  6. 从远程仓库拉取更新 (git pull)
    如果远程仓库有了新的提交 (比如你的同事推送了更新,或者你在 GitHub 网站上直接做了修改),你需要将这些更新拉取到你的本地仓库。
    在你的本地项目文件夹中,确保你在正确的分支上 (例如 main):

    git pull origin main
    

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

    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 账号下的副本)。
      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多轮问答,可以学到几乎所有公开知识。


网站公告

今日签到

点亮在社区的每一天
去签到