从 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多轮问答,可以学到几乎所有公开知识。

相关推荐
一直在学习的小白~3 小时前
Sourcetree安装使用的详细教程
git
鸿蒙布道师4 小时前
ChatGPT深度研究功能革新:GitHub直连与强化微调
人工智能·深度学习·神经网络·自然语言处理·chatgpt·数据挖掘·github
影子24015 小时前
git项目迁移,包括所有的提交记录和分支 gitlab迁移到gitblit
git·gitlab·git迁移
白总Server5 小时前
微软系统 红帽系统 网络故障排查:ping、traceroute、netstat
linux·运维·服务器·microsoft·中间件·架构·github
laimaxgg10 小时前
Git撤销修改
git
象骑士Hack12 小时前
Xterminal(或 X Terminal)通常指一类现代化的终端工具 工具介绍
git
新时代牛马13 小时前
git处理浅克隆
git
学习2年半14 小时前
git相关
git
极小狐14 小时前
如何减少极狐GitLab 容器镜像库存储?
运维·git·rpc·kubernetes·ssh·gitlab·terraform