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

news2025/5/10 11:46:56

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

学习 Git 和 GitHub 的路线图:

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

  • 视频教程 (可视化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安装教程 (非常推荐):
    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多轮问答,可以学到几乎所有公开知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2372274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双指针算法详解(含力扣和蓝桥杯例题)

目录 一、双指针算法核心概念 二、常用的双指针类型&#xff1a; 2.1 对撞指针 例题1&#xff1a;盛最多水的容器 例题2&#xff1a;神奇的数组 2.2 快慢指针&#xff1a; 例题1&#xff1a;移动零 例题2&#xff1a;美丽的区间&#xff08;蓝桥OJ1372&#xff09; 3.总…

【网络编程】二、UDP网络套接字编程详解

文章目录 前言Ⅰ. UDP服务端一、服务器创建流程二、创建套接字 -- socketsocket 属于什么类型的接口❓❓❓socket 是被谁调用的❓❓❓socket 底层做了什么❓❓❓和其函数返回值有没有什么关系❓❓❓ 三、绑定对应端口号、IP地址到套接字 -- bind四、数据的发送和接收 -- sendto…

【应急响应】- 日志流量如何分析?

【应急响应】- 日志流量如何下手&#xff1f;https://mp.weixin.qq.com/s/dKl8ZLZ0wjuqUezKo4eUSQ

djinn: 3靶场渗透

djinn: 3 来自 <https://www.vulnhub.com/entry/djinn-3,492/> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.243 3&#xff0…

VS Code配置指南:打造高效的QMK开发环境

VS Code配置指南&#xff1a;打造高效的QMK开发环境 前言 你是否曾为QMK固件开发环境的搭建而头疼不已&#xff1f;本文将手把手教你使用Visual Studio Code&#xff08;简称VS Code&#xff09;这款强大的代码编辑器来构建一个完美的QMK开发环境&#xff0c;让你的键盘固件开…

服务器多客户端连接核心要点(1)

刷题 服务器多客户端连接核心要点 多进程服务器 实现原理 fork子进程&#xff1a;每次accept新客户端后&#xff0c;调用fork创建子进程。独立处理&#xff1a;子进程负责与客户端通信&#xff08;如read/write&#xff09;&#xff0c;父进程继续监听新连接。 特点 隔离性…

Stagehand:AI驱动的下一代浏览器自动化框架

Stagehand 是一个结合了 AI 代理、AI 工具和 Playwright 的浏览器自动化框架。核心理念是&#xff1a;让自动化任务既可控又智能。与传统工具不同&#xff0c;Stagehand 不仅仅依赖 AI 代理的“黑箱操作”&#xff0c;而是通过与 Playwright 的深度结合&#xff0c;赋予开发者对…

爱普生FA-238在车身控制模块中的应用

在汽车智能化、电子化飞速发展的当下&#xff0c;车身控制模块&#xff08;BCM&#xff09;作为车辆的 “智能管家”&#xff0c;肩负着协调和控制众多车身功能的重任&#xff0c;从车门的解锁与锁定、车窗的升降&#xff0c;到车灯的智能点亮与熄灭&#xff0c;再到雨刮器的自…

【A2A】管中窥豹,google源码python-demo介绍

前言 A2A&#xff08;Agent2Agent&#xff09;是 Google 推出的一项新协议&#xff0c;旨在解决多智能体&#xff08;Multi-Agent&#xff09;系统中跨平台、跨组织协作的难题。它为 AI 代理之间的通信、协作和任务分工提供了一个统一的标准&#xff0c;可以类比为网页世界的 H…

004-nlohmann/json 快速认识-C++开源库108杰

了解 nlohmann/json 的特点&#xff1b;理解编程中 “数据战场”划分的概念&#xff1b;迅速上手多种方式构建一个JSON对象&#xff1b; 1 特点与安装 nlohmann/json 是一个在 github 长期霸占 “JSON” 热搜版第1的CJSON处理库。它的最大优点是与 C 标准库的容器数据&#xf…

Matlab实现CNN-BiLSTM时间序列预测未来

Matlab实现CNN-BiLSTM时间序列预测未来 目录 Matlab实现CNN-BiLSTM时间序列预测未来效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CNN-BiLSTM时间序列预测未来&#xff1b; 2.运行环境Matlab2023b及以上&#xff0c;data为数据集&#xff0c;单变量时间序…

C语言| sizeof(array)占多少字节

C语言| 数组名作为函数参数 sizeof(数组名); 可以求出整个数组在内存中所占的字节数。 被调函数Array_Sum()中&#xff0c;数组array使用sizeof会得到多少&#xff1f; 实参数组a占32字节&#xff0c;实参a传给形参array&#xff0c;只占4字节。 原因如下&#xff1a; 数组名做…

【文件系统—散列结构文件】

文章目录 一、实验目的实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解linux文件系统的内部技术&#xff0c;掌握linux与文件有关的系统调用命令&#xff0c;并在此基础上建立面向随机检索的散列结构文件&#xff1b;## 二、实验内容与设计思想 实验内容 1.设…

World of Warcraft [CLASSIC][80][Deluyia] [Fragment of Val‘anyr]

瓦兰奈尔的碎片 [Fragment of Valanyr] 有时候下个班打个游戏&#xff0c;没想到套路也这么多&#xff0c;唉&#xff0c;何况现实生活&#xff0c;这一个片版本末期才1000G&#xff0c;30个&#xff0c;也就30000G&#xff0c;时光徽章等同月卡15000G&#xff0c;折合一下也就…

数组和指针典型例题合集(一维数组、字符数组、二维数组)

1.一维数组 数组名的理解 数组名是数组首元素&#xff08;第一个元素&#xff09;的地址 但是有两个例外&#xff1a; 1.sizeof &#xff08;数组名&#xff09;—— 数组名表示整个数组&#xff0c;就算的是整个数组的大小&#xff0c;单位是字节。 2.&数组名 —— 数…

地级市-机器人、人工智能等未来产业水平(2009-2023年)-社科数据

地级市-机器人、人工智能等未来产业水平&#xff08;2009-2023年&#xff09;-社科数据https://download.csdn.net/download/paofuluolijiang/90623814 https://download.csdn.net/download/paofuluolijiang/90623814 此数据集统计了2009-2023年全国地级市在机器人、人工智能等…

epub格式转txt格式工具,txt批量转PDF

epub格式转txt格式工具&#xff0c;功能如图&#xff1a; txt格式批量转PDF 参考原文&#xff1a;epub格式转txt格式工具&#xff0c;txt批量转PDF 轻轻一点就关注, 好运连连挡不住&#xff0c;点个关注吧。

电赛经验分享——模块篇

1、前言 打算在这一个专栏中&#xff0c;分享一些本科控制题电赛期间的经验&#xff0c;和大家共同探讨&#xff0c;也希望能帮助刚刚参加电赛的同学&#xff0c;了解一些基本的知识。一些见解和看法可能不同或有错误&#xff0c;欢迎批评指正。 在本文中&#xff0c;主要介绍笔…

JVM之内存管理(一)

部分内容来源&#xff1a;JavaGuide二哥Java 图解JVM内存结构 内存管理快速复习 栈帧&#xff1a;局部变量表&#xff0c;动态链接&#xff08;符号引用转为真实引用&#xff09;&#xff0c;操作数栈&#xff08;存储中间结算结果&#xff09;&#xff0c;方法返回地址 运行时…

鸿蒙编译boost整合linux跨平台应用

openharmony deveco 4.1支持armeabi-v7a deveco 5.0后不支持arm32位系统 boost编译 使用deveco的写cmake集成boost boost使用1.88的最新版本&#xff0c;带cmake工具链 https://github.com/boostorg/boost.git boost的源码都在sub_module中 deveco 4.1的版本sdk最高到9&am…