资讯动态

Git与GitHub从零入门:版本控制到代码推送完整指南

发布时间:2026/8/27 20:09:29 来源:尧图企业网站定制
最近后台收到不少读者留言问的问题集中在两类一类是刚接触编程不知道 Git 和 GitHub 到底是什么关系另一类是本地仓库已经建好了代码却怎么也推不到 GitHub 上报错一个接一个。网上关于 Git 的资料其实非常多但很多教程默认读者已经掌握了基本概念直接甩命令零基础的朋友看着看着就断了。这篇文章打算换一种讲法从 Git 是什么讲起带你把安装、配置、常用命令、推送到 GitHub 的完整流程走一遍。全程不跳步每一条命令都会解释作用并给出运行结果。不论你是刚学编程的初学者还是已经写了一段时间代码、但从未系统整理过 Git 知识的后端开发者都可以跟着这篇文章完整过一遍。读完你不仅能用 Git 管理自己的项目还能把代码正常提交到 GitHub并理解仓库、暂存区、提交、分支这些核心概念。1. Git 和 GitHub 到底是什么1.1 先理解 Git 解决的问题先想一个非常常见的场景你写完一个项目今天改了一版明天又改了一版后来发现新改的代码有问题想回到昨天的版本却发现昨天那份文件已经被覆盖了。为了避免这种问题你可能会把文件夹复制多份起名project、project_v2、project_final、project_final_20240101。时间久了你根本分不清哪份是最新的哪份才是能运行的。Git 就是用来解决这个问题的。它是一个分布式版本控制系统你可以在项目任意时刻拍下一张“快照”这个快照在 Git 中称为一次提交commit。每次提交都会记录这次提交改动了哪些文件改动前后的内容分别是什么提交时间、提交作者一段可以自定义的提交说明。有了这些记录你可以随时回退到任意一次提交可以对比任意两次提交的差异也可以从某个历史版本拉出新的分支继续开发。相比手动复制文件夹Git 更加系统而且它会在项目目录下生成一个隐藏的.git目录把全部版本历史保存在那里不会污染你的源代码目录。这里需要强调一下 Git 的“分布式”特性。也就是说每个开发者本地都有一份完整的仓库历史不只是最新代码。即使暂时没有网络你也能在本地完成提交、查看历史、创建分支这些操作。等到网络可用时再把本地提交推送push到远程仓库。1.2 Git 和 GitHub 的区别很多人会把 Git 和 GitHub 混为一谈实际上它们是两个不同的东西。Git是一个工具安装在你自己的电脑上负责管理本地项目的版本历史。GitHub是一个基于 Git 的在线代码托管平台可以把你的本地仓库同步到云端方便团队协作、代码备份、开源分享、Issue 管理等。打个比方Git 是你电脑上的记事本和文件管理系统GitHub 是网上的共享文件柜。你既可以在本地只用 Git 做版本管理不需要 GitHub但只要你想把代码分享给别人或者多台电脑之间同步就离不开 GitHub 这类远程托管平台。类似的平台还有 GitLab、Gitee码云等。它们操作逻辑基本一致核心命令是通用的。所以你把 Git 学好了换到任何平台都能很快上手。1.3 这篇文章的实践路线本文会按照下面这条路线带你把全流程走通安装 Git配置用户名、邮箱和 SSH Key初始化本地仓库掌握add、commit、status、log等基础命令注册并创建一个 GitHub 仓库把本地代码推送push到 GitHub模拟团队协作体验clone、pull、push与冲突解决。到这一步为止你已经可以独立完成“本地写代码 → 提交到 Git → 推送到 GitHub”的日常开发闭环了。后面再慢慢接触分支合并、Rebase、Git Flow 等进阶内容会轻松很多。2. 环境准备在不同系统上安装 Git安装 Git 的方式很多而且不同系统的安装方法差异比较大。下面分别介绍 Windows、macOS 和 Linux 下的常见安装方式。2.1 Windows 下安装 GitWindows 用户最常用的安装方式是下载官方安装包。打开 Git 官网下载页面选择对应系统版本的安装包一般是 64-bit。下载完成后双击运行安装程序在安装向导中绝大多数选项保持默认即可。有两个选项建议留意一下Select Components选择组件页面建议勾选 “Git Bash Here” 和 “Git GUI Here”这样在文件夹右键菜单里就能直接打开 Git Bash非常方便。Choosing the default editor页面默认是 Vim。如果你不熟悉 Vim可以改成 VS Code 或其他你常用的编辑器避免之后写提交信息时卡在 Vim 里不知道怎么退出。安装完成后在任意目录下点击右键选择 “Git Bash Here”或者按Win R输入cmd回车再输入git --version出现版本号就说明安装成功了。$ git --version git version 2.40.0.windows.1需要提醒的是Git 的版本号会随着时间不断更新你看到的数字可能和这里不一样这完全正常。本文中的命令在所有主流版本中都能使用。2.2 macOS 下安装 GitmacOS 上安装 Git 最简单的方式是安装 Xcode Command Line Tools。打开终端Terminal输入xcode-select --install系统会弹出安装窗口点击安装即可。这个方式安装的 Git 会和 macOS 系统环境兼容得比较好。如果你已经安装了 Homebrew也可以用它安装brew install git这种方式通常会装到比较新的版本适合需要最新功能的开发者。2.3 Linux 下安装 GitDebian / Ubuntu 系发行版直接使用 aptsudo apt update sudo apt install gitCentOS / RHEL / Fedora 系发行版使用 yum 或 dnfsudo yum install git或者sudo dnf install gitLinux 发行版比较多不同系统包管理器不一样这里只列了最常见的几种。如果你的发行版比较特殊建议查一下对应系统的软件包管理命令。2.4 安装完成后验证不管哪个系统安装完成后都建议先检查 Git 是否可用。在终端或命令提示符中执行git --version能正常输出版本号就说明 Git 已经安装成功。接下来我们把 Git 的初始配置做一下这一步非常重要因为每次提交代码时Git 都要记录“是谁提交的”。3. 第一次使用前的全局配置3.1 配置用户名和邮箱Git 提交记录里会包含你的用户名和邮箱所以这组配置必须认真填写。git config --global user.name your-name git config --global user.email your-emailexample.com把your-name替换成你的名字建议用英文或拼音把your-emailexample.com替换成你常用的邮箱。这里推荐使用你注册 GitHub 时用的邮箱这样 GitHub 能把提交记录和账号关联起来。--global的含义是“全局生效”这台电脑上所有仓库都会默认使用这个用户名和邮箱。如果某个项目需要单独设置不同身份可以在项目目录下执行不带--global的配置命令。查看当前配置git config --global --list输出效果类似user.nameyour-name user.emailyour-emailexample.com3.2 配置 SSH Key推送代码到 GitHub 时有 HTTPS 和 SSH 两种认证方式。HTTPS 方式每次操作需要输入账号密码也可以配置凭据管理器记住密码SSH 方式则需要先在本地生成密钥对把公钥添加到 GitHub 账号里之后推送代码就不再需要反复输入密码了。对于日常开发来说SSH 方式更方便所以这里重点介绍 SSH 的配置方法。首先在终端里输入下面命令ssh-keygen -t rsa -b 4096 -C your-emailexample.com这里的-C参数只是一个备注通常写邮箱即可。执行后会有几次询问前两个询问可以直接按回车使用默认值第一个询问是“保存密钥的文件路径”默认位置是用户目录下的.ssh/id_rsa第二个询问是“是否设置密码短语passphrase”留空表示不设置直接回车即可。如果之前生成过密钥系统会询问是否覆盖输入y继续。但要注意覆盖后旧的公钥会失效如果旧公钥已添加到 GitHub 或服务器需要同步更新。生成完成后查看公钥内容cat ~/.ssh/id_rsa.pub输出是一长串以ssh-rsa开头、结尾是你邮箱的文本。把这串文本完整复制下来接下来要添加到 GitHub 账号里。3.3 把公钥添加到 GitHub登录 GitHub 官网点击右上角头像进入Settings设置在左侧菜单里选择SSH and GPG keys然后点击New SSH key按钮。在表单中填写一个标题Title例如 “My Laptop”在 Key 区域粘贴刚才复制的公钥最后点击Add SSH key完成添加。验证连接是否成功在终端里执行ssh -T gitgithub.com如果看到类似下面这样的提示说明 SSH 配置已经生效Hi your-name! Youve successfully authenticated, but GitHub does not provide shell access.这个提示的意思是认证成功GitHub 不提供 shell 远程登录但 SSH 通道已经可以正常用于 Git 操作了。4. 掌握 Git 基础命令在真正连接 GitHub 之前先把本地 Git 的核心操作捋清楚。这一部分不需要网络你可以在任意目录下跟着做。4.1 创建仓库git init在终端里进入你想要管理的项目目录执行git init这一命令会在当前目录下创建一个隐藏的.git目录这个目录保存了仓库的全部版本信息。从此以后这个目录就变成了 Git 仓库。输出效果类似Initialized empty Git repository in /Users/xxx/hello-world/.git/如果有项目中已有大量文件也不必担心Git 不会自动把文件全部纳入版本控制需要你手动添加。4.2 查看文件状态git statusgit status是使用频率最高的命令之一它告诉你当前工作区、暂存区、本地仓库之间有哪些差异。先在工作目录里创建一个文件echo hello git readme.txt然后执行git status输出中会看到类似下面的内容On branch master No commits yet Untracked files: (use git add file... to include in what will be committed) readme.txt nothing added to commit but untracked files present (use git add to track)这里出现了一个关键词Untracked意思是这个文件还没有被 Git 跟踪。也就是说Git 知道它的存在但还没有把它纳入版本管理。4.3 添加到暂存区git add为了让 Git 记录这个文件需要先把它加入暂存区git add readme.txt如果想把当前目录下所有文件都加入暂存区可以执行git add .再次运行git status输出会变化On branch master No commits yet Changes to be committed: (use git rm --cached file... to unstage) new file: readme.txt文件状态从 Untracked 变成了Changes to be committed表示文件已经进入了暂存区等待被提交。这里可以停下来理解一下 Git 的三层结构工作区你电脑里能看到的目录文件在这里被修改。暂存区Index / Staging Area存放你通过git add添加的改动。暂存区可以理解为“待提交清单”。本地仓库通过git commit提交后改动就进入本地仓库形成一条不可变的历史记录。这样设计的价值在于你可以分批次、有选择地提交文件。比如一个项目同时修改了多个功能点你可以只把与某个功能相关的文件加入暂存区单独提交一次让提交记录更加清晰。4.4 提交到本地仓库git commit文件加入暂存区后下一步就是提交。执行git commit -m first commit-m后面的内容就是提交信息用来简要说明这次提交做了什么。输出效果类似[master (root-commit) 3f6a2d1] first commit 1 file changed, 1 insertion() create mode 100644 readme.txt这个输出里的3f6a2d1是本次提交的短哈希值相当于这次提交的唯一编号。1 file changed, 1 insertion()表示这次提交改动了一个文件增加了一行内容。提交后工作区、暂存区、本地仓库就保持一致了。此时再执行git status会看到On branch master nothing to commit, working tree cleanworking tree clean表示工作区是干净的没有待提交的改动。4.5 查看提交历史git log提交过多次之后想查看历史记录使用git log输出效果类似commit 3f6a2d1a6b8d0b9f4e5661d8f1d7f3e9a966c321 (HEAD - master) Author: your-name your-emailexample.com Date: Tue Jan 1 00:00:00 2025 0800 first commitgit log默认会显示每条提交的完整哈希值、作者、日期和提交信息。日志比较多的时候可以按q键退出。如果想看精简一点的记录每条只占一行可以加参数git log --oneline这会输出类似3f6a2d1 (HEAD - master) first commit在后续查阅历史、定位问题时--oneline这种方式会非常直观。4.6 撤销与回退写代码难免出错Git 给你提供了多种后悔药。根据后悔程度不同使用的命令也不一样。情况一文件修改了但还没加入暂存区想回到上一次提交时的状态执行git restore readme.txt这条命令会把工作区中该文件的改动全部丢弃文件内容恢复到最近一次提交的版本。需要注意这个操作不可恢复使用前要确认文件里没有你想保留的改动。情况二文件已经加入暂存区想撤销暂存执行git restore --staged readme.txt这条命令会把文件从暂存区移出但保留工作区的改动。它相当于把git add的动作撤销掉文件内容不会被改动。情况三已经提交了想回退到上一个提交git reset --soft HEAD~1HEAD指向当前分支的最新一次提交HEAD~1表示上一个提交。--soft表示只移动 HEAD 指针不改变暂存区和工作区。也就是说这次提交的改动会回到暂存区你可以重新组织后再提交。如果希望彻底回退连暂存区也一起重置用--mixed默认参数可以省略git reset HEAD~1工作区的文件内容仍会保留改动但不再是暂存状态。如果连工作区的改动也不想要了用--hardgit reset --hard HEAD~1这条命令会把提交、暂存区、工作区一并回退到上一个提交的状态这个操作有较大的数据丢失风险生产环境一定要谨慎使用。如果已经提交到远程仓库更不建议直接reset --hard远程分支因为这会重写历史影响其他人。4.7 分支管理分支是 Git 非常核心的概念。你可以在主分支的基础上拉出多条支线各自开发互不影响开发完成后再合并回主分支。查看当前所有分支git branch创建新分支git branch feature-login切换到该分支git checkout feature-login也可以一步完成“创建并切换分支”git checkout -b feature-login在新分支上做的提交不会影响主分支这是 Git 支持多人协作的关键机制。等到功能开发完成切回主分支并合并git checkout master git merge feature-login日常开发中主分支一般保持稳定不建议直接在主分支上写未验证的代码。每个新功能或修复都应该从主分支拉出独立分支开发、测试、审查通过后再合并回去。5. 完整实战本地仓库推送到 GitHub前面四节已经把本地 Git 的核心操作讲完了。现在把本地仓库与 GitHub 连接起来走一遍从创建远程仓库到推代码的完整流程。5.1 创建 GitHub 仓库登录 GitHub 后在首页左侧点击New按钮或者右上角 “” 图标下拉框里选择New repository。在创建页面填写Repository name仓库名例如hello-world。仓库名通常使用短横线分隔的小写英文例如my-first-project避免使用中文和空格。Description描述可选给仓库写一句说明。Public / PrivatePublic 表示所有人可见Private 表示仅你自己和指定协作者可见。初学者练习建议选 Private避免把不必要的代码公开。不要勾选 “Add a README file”因为本地仓库已经初始化过了避免出现远程仓库和本地仓库内容不冲突的状态。点击Create repository创建完成。GitHub 会进入一个引导页面显示远程仓库地址。这里有两种协议可以选HTTPShttps://github.com/your-name/hello-world.gitSSHgitgithub.com:your-name/hello-world.git本文已经配置好 SSH Key所以使用 SSH 地址。5.2 关联远程仓库在本地仓库目录中执行git remote add origin gitgithub.com:your-name/hello-world.git这里origin是远程仓库的默认名称可以理解为给远程仓库地址起的一个别名方便后续使用。输入这一条命令后可以查看远程仓库信息git remote -v输出效果类似origin gitgithub.com:your-name/hello-world.git (fetch) origin gitgithub.com:your-name/hello-world.git (push)fetch表示拉取push表示推送两条记录分别对应从远程拉取和推送到远程两种操作。5.3 推送代码到远程本地代码已经提交过了现在执行推送git push -u origin master-u是--set-upstream的简写它的作用是把本地master分支和远程origin/master分支关联起来。设置过之后后续推送只需输入git push即可不用再写完整命令。如果一切顺利输出效果类似Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 218 bytes | 218.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To github.com:your-name/hello-world.git * [new branch] master - master Branch master set up to track remote branch master.看到* [new branch] master - master说明本地master分支已经推送成功。现在刷新 GitHub 仓库页面就能看到 readme.txt 文件了。5.4 克隆远程仓库克隆clone指把远程的整个仓库完整复制到本地。比如你换了一台电脑想把 GitHub 上的项目下载下来执行git clone gitgithub.com:your-name/hello-world.git执行后当前目录下会多出一个hello-world文件夹里面不仅有项目文件还包括完整的 Git 历史。你可以在里面继续修改、提交、推送。如果仓库比较大或者网络不稳定克隆过程可能会比较慢可以耐心等待或检查网络环境。克隆完成后进入目录cd hello-world此时该目录已经是一个 Git 仓库并且已经和远程仓库关联好了。不需要再执行git remote add。5.5 拉取更新与解决冲突在团队协作或两台电脑同步场景中你经常会遇到一种情况本地有未推送的提交远程仓库也已经被别人更新了。这时候如果直接git push很可能会被拒绝。先尝试拉取远程更新git pull这个命令会执行两个动作先从远程拉取最新提交然后合并到当前分支。如果本地和远程改了同一个文件的同一部分Git 无法自动合并就会产生冲突conflict。冲突时Git 会在冲突文件里插入标记类似 HEAD 本地内容 远程内容 远程提交描述你需要手动打开这个文件把不需要的部分删除保留最终想要的内容然后保存文件。接着重新添加并提交git add readme.txt git commit -m resolve conflict最后再推送到远程git push冲突本身不可怕它只是 Git 在提示你“这里需要人类做决定”。关键是不要慌看清楚、、分割出来的两边内容再决定保留哪部分。6. 常见问题与排查思路Git 和 GitHub 使用过程中踩坑是非常正常的。这里整理了几个高频问题以及相应的排查步骤。问题现象常见原因解决思路git push时提示Permission denied (publickey)SSH Key 未生成或未添加到 GitHub重新生成 SSH Key并检查公钥是否已添加到 GitHub执行ssh -T gitgithub.com验证连接git push时提示failed to push some refs远程仓库存在本地没有的提交先执行git pull拉取最新内容解决合并问题后再推送提交人信息显示不对用户名或邮箱配置错误检查git config --global --list使用正确信息重新配置推送到远程后git log不显示提交推送分支与当前查看的分支不一致使用git branch -a查看所有分支确认当前所在分支和远程分支Git 提交时卡在 Vim 界面默认编辑器是 Vim按了不熟悉的键按Esc输入:wq回车退出 Vim 并保存也可以更换默认编辑器本地修改不小心被覆盖执行了git restore或git reset --hard此类操作不可恢复重要改动尽量先提交没有把握时先备份文件GitHub 网页访问不稳定代码拉取速度慢本地网络环境与该站点连通性不佳检查网络连通性重启路由器或更换网络环境后重试也可以通过官方文档确认是否有服务异常公告git pull产生冲突文件本地与远程修改了同一个文件的同一区域打开冲突文件手动保留正确内容重新 add 和 commit排查 Git 问题有一个通用的思路先看终端完整的报错信息不要只看屏幕上最后一行再运行git status查看当前仓库状态最后结合报错信息搜索对应的官方文档或社区讨论。大多数问题都能在三步之内定位。7. 最佳实践与工程建议工具会用是一回事用得好是另一回事。下面这些建议是实际项目中比较常被验证过的做法分享给大家。7.1 提交信息规范提交信息是团队协作的历史档案写得好不好直接影响后期排错效率。推荐使用下面这种简洁的结构type: subject例如feat: add login page fix: fix null pointer exception in order module docs: update readme refactor: refactor user service codetype用来说明提交类型常见的包括类型含义feat新功能fix修复缺陷docs文档变更style格式调整不影响逻辑refactor重构代码不改变功能test测试相关chore构建流程、依赖等杂项提交信息不要写“update”这类没有信息的描述尽量让人只看信息就能理解这次提交做了什么。7.2 分支管理策略对于个人项目分支管理可以简单一些master或main分支作为稳定版本所有新功能在独立分支上开发。对于多人协作项目建议参考常用的 Git Flow 或 GitHub Flow 策略main分支始终保持可发布状态新功能从main分支拉出feature/xxx分支修复缺陷拉出fix/xxx分支功能完成后通过 Pull Request 评审再合并回主分支。Pull Request简称 PR不只是代码合并它同时也是代码审查的载体。在 PR 里参与讨论、查看 diff、提出问题能有效提升代码质量。这个流程理解成“申请把分支代码合并进主分支”即可GitHub 会把分支间的差异以可视化的方式展示出来。7.3 敏感信息保护一定不要把密码、密钥、Token、数据库连接串等敏感信息提交到 Git 仓库尤其不能提交到公开仓库。之前有过不少因为把云厂商密钥提交到 GitHub 导致账号被刷爆的案例。规避方法使用环境变量或本地配置文件保存密钥并把这类文件加入.gitignore项目初始化时先创建.gitignore把依赖目录、本地配置、日志文件、临时文件排除掉提交前用git status检查是否有不该提交的文件如果已经提交了敏感信息应该立即轮换密钥并及时修改历史记录而不是简单删除文件。如果历史记录里已经存在敏感信息即使后面删掉了文件历史提交里依然可以查看所以最稳妥的做法是立刻让对应密钥失效并重新生成。7.4 使用 .gitignore 忽略不需要的文件以 Java 项目为例常见的需要忽略的文件包括target/ *.class *.jar *.war .idea/ *.iml .DS_Store以 Node 项目为例node_modules/ dist/ .env.gitignore的规则其实很简单每一行写一个匹配模式*表示通配。可以把所有用户相关的本地配置、编译产物、依赖目录都写进去避免误提交。7.5 推送前先检查日常开发推荐养成一个习惯每次推送前先执行git status和git diff看清楚当前到底改了什么、要提交哪些文件。很多误提交是因为git add .把不想提交的文件也加进去了。对新手来说显式地git add具体的文件名会更容易控制提交内容。8. 总结与学习路线这篇文章从零开始带大家完成了 Git 的安装、全局配置、SSH Key 配置、基础命令学习以及本地仓库推送到 GitHub 的完整流程。你能够掌握的技能包括理解 Git 的分布式版本控制思想和三层结构使用git init、git add、git commit、git log管理本地版本使用分支进行独立开发与合并使用 SSH 方式连接 GitHub完成推送、克隆、拉取与冲突解决知道如何排查最常见的 Git 报错。下一步可以重点学习几个进阶方向深入理解git merge与git rebase的差异和使用约束熟悉git stash临时保存工作区改动了解git cherry-pick挑选指定提交学习 GitHub 的 Pull Request 协作流程了解 Semantic Versioning语义化版本和 Git Tag 的关系。在实际项目中最优先关注的风险是敏感信息泄露和误操作导致的历史回退。前者靠.gitignore和密钥轮换来防范后者靠“提交前检查、重要改动先提交、不轻易--hard”来规避。Git 的命令体系虽然庞大但日常工作经常用到的其实就那么十几个。先把这一条主链路练熟不用急着把每个参数都背下来。动手实操一次推送比看十篇文章都有用。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价