Re:Linux系统篇(十):从零上手 Git + GitHub(Ubuntu 环境实操完整版|个人代码归档必备)


观众老爷们大家好 这里是邪修KING的独家频道 本文属于系列Linux系统篇 ------操作指令 一起学Linux的小伙伴可订阅专栏: Linux系统篇

文章简介

适合人群:Linux / C 语言初学者、在校学生,想要把课堂代码备份托管到 GitHub,全程基于 Ubuntu 虚拟机实操,避开 90% 新手踩坑。

本文覆盖:SSH 密钥配置、Git 三板斧完整流程、命令详解、常见报错排查、日常规范。单人练手、课程作业存档掌握本文内容完全够用。

环境:Ubuntu 22.04 / Xshell 远程连接

仓库用途:个人学习代码备份、课堂代码归档

一、基础概念理解

1. Git 和 GitHub 的区别

  1. Git :本地版本控制工具,安装在你的 Ubuntu 虚拟机里,用来记录代码每一次改动、保存历史快照。
  2. GitHub:远程代码托管网站(服务器),用来存放本地上传的代码,云端备份、随时查看、分享代码。

类比:Git = 电脑上的存档软件;GitHub = 云端网盘。

2. 核心流程原理(必须理解)

Git 分为三个工作区域:

  1. 工作区 :你写代码的文件夹(lesson4/main.c 这些文件)
  2. 暂存区git add 之后,文件放到这里,准备打包存档
  3. 本地版本库git commit 之后,生成一份永久版本快照,存在本地 .git 隐藏文件夹
  4. 远程仓库(GitHub)git push 将本地版本上传到云端

✅ 固定顺序:工作区 → git add(暂存) → git commit(本地存档) → git push(上传云端)

网上所说 Git「三板斧」就是这三步,单人代码归档核心命令。

二、前置准备:Ubuntu 配置 SSH 免密推送(重点避坑)

如果不配置 SSH,每次上传代码需要输入账号密码;配置 SSH 密钥后,后续 git push 免密操作。

1. 生成 ed25519 密钥(Ubuntu 终端执行)

bash 复制代码
ssh-keygen -t ed25519 -C "你的邮箱"

执行后一路回车,不需要设置密码

2. 查看公钥(复制完整内容)

bash 复制代码
cat ~/.ssh/id_ed25519.pub

输出的完整一整串 (开头 ssh-ed25519,结尾是你的邮箱)全部复制。

3. GitHub 添加公钥(新手高频踩坑点)

  1. 不要进入单个仓库的 Settings !点击右上角头像 → Settings(账号全局设置)
  2. 左侧菜单找到 SSH and GPG keys
  3. 点击 New SSH key
    • Title:自定义(Ubuntu 虚拟机,用来区分设备)
    • Key:粘贴刚刚复制的完整公钥
  4. 保存,验证账号密码。

4. 测试连通是否成功

bash 复制代码
ssh -T git@github.com

出现提示:Hi 你的用户名! You've successfully authenticatedSSH 配置成功

三、Git 三板斧|日常 90% 场景只用这三条命令

⚠️ 适用场景:单人开发、课堂代码归档、自己练习项目(不涉及多人协作)

bash 复制代码
# 1. git add:将修改/新增文件加入【暂存区】
git add 文件夹名/文件名
# 当前目录全部文件提交
git add .

# 2. git commit:打包生成本地版本快照,-m 后面填写本次修改备注
git commit -m "备注:描述本次新增/修改了什么内容"

# 3. git push:将本地版本上传推送到 GitHub 远程仓库
git push

命令详细解读

  1. git add
    • git add lesson4/:只上传 lesson4 整个文件夹
    • git add .:提交当前目录下所有未跟踪、修改过的文件
    • ❗ 不能省略:不执行 add,commit 识别不到新增文件(新手最高频报错)
  2. git commit -m "备注文字"
    • -m = message,提交日志备注,仅用于记录说明,不影响文件上传
    • 规范:备注尽量简洁清晰,例如 新增lesson4 IO练习代码,方便后续查看历史
    • 作用:生成一份不可丢失的版本快照,可以随时回看、回退
  3. git push
    • 第一次推送分支时,需要绑定上下游:
bash 复制代码
git push -u origin main
  • -u = --set-upstream:绑定本地 main 分支 和 GitHub 远程 main 分支,仅第一次需要
  • 绑定完成后,后续推送直接使用 git push

四、配套辅助命令(推荐熟记,日常高频使用)

bash 复制代码
# 查看当前文件状态:哪些文件修改、未add、未提交
git status

# 查看全部提交历史日志,查看每一次commit备注
git log

# 拉取远程GitHub最新代码到本地(网页端手动改代码后使用)
git pull

## 五、完整实操案例(本次课堂实操全过程)

需求:将 Ubuntu 中 lesson4 lesson5 lesson6 文件夹上传 GitHub

  1. 进入项目根目录
bash 复制代码
cd ~/113
  1. 添加文件夹到暂存区
bash 复制代码
git add lesson4/ lesson5/ lesson6/
  1. 本地生成版本快照
bash 复制代码
git commit -m "上传lesson4 lesson5 lesson6 Linux课堂练习代码"
  1. 推送到远程仓库(首次绑定上游)
bash 复制代码
git push -u origin main

推送完成后,刷新 GitHub 仓库网页,即可看到上传的文件夹与源码。

后续迭代示例(修改 lesson4 内部代码,更新到 GitHub)

bash 复制代码
git add lesson4/
git commit -m "修复lesson4 Makefile编译警告"
git push

六、新手高频报错 & 解决方案(本次实操踩坑汇总)

报错 1:nothing added to commit but untracked files present

✅ 原因:缺少 git add ,新增文件没有加入暂存区,直接执行 commit

✅ 解决:先执行 git add 目标文件/文件夹

报错 2:The current branch main has no upstream branch

✅ 原因:本地 main 分支未绑定 GitHub 远程分支,首次推送缺少 -u

✅ 解决:执行 git push -u origin main

报错 3:git@github.com: Permission denied (publickey)

✅ 原因:SSH 公钥配置失败,公钥复制不全、粘贴到仓库局部设置而非账号全局 SSH

✅ 解决:重新复制完整公钥,到账号全局 SSH and GPG keys 添加,再执行连通测试

提示:Everything up-to-date

✅ 含义:本地所有改动都已经上传 GitHub,没有新内容可以推送,属于正常提示,不是报错

七、使用边界说明:三板斧什么时候不够用?

  1. 够用(你现阶段):个人作业、自学练手、代码备份,单人独立开发,不需要合并别人代码
  2. 不够用(未来企业开发):多人协作、分支开发、代码冲突、版本回退、撤销提交

进阶命令:git branch、git checkout、git reset、git merge,工作后再学习即可,现阶段不用额外记忆,避免混淆。

八、个人代码归档最佳实践(规范建议)

  1. 每次提交备注写清楚改动内容,不要写无意义备注(aaa、test)
  2. 区分提交粒度:新增一课代码单独提交,大规模修改分开提交
  3. 经常使用 git status 查看文件状态,避免误传无关文件
  4. 重要代码定期 push 到 GitHub,防止虚拟机文件丢失

九、总结

对于在校学生、自学编程用来备份课堂代码 :掌握 Git 三板斧(add /commit/push)+ git status 查看状态,配合 SSH 免密配置,完全满足长期使用需求。

Git 的核心逻辑牢记:先暂存、再本地存档、最后云端推送 ,顺序不乱就能避开绝大多数新手问题。

当后续参与团队项目开发,再拓展分支、冲突处理等高级 Git 功能。

相关推荐
wuminyu1 小时前
JDK21中FFM api的upcall回调机制解析
java·linux·c语言·jvm·c++
李可以量化1 小时前
Redis 从了解到精通(三)下:性能基准测试与量化场景性能避坑指南
redis·git·python·量化交易·qmt·ptrade
m4Rk_1 小时前
【论文阅读】Agent 记忆机制(45):ReMemR1——让长期上下文 Agent 可以回溯历史记忆进行非线性推理
论文阅读·人工智能·学习·开源·github
蜀道山老天师1 小时前
Zabbix监控MySQL与Redis应用实践完整指南
linux·运维·redis·mysql·zabbix
OsDepK2 小时前
在安卓Termux终端中部署openssh
linux·服务器
青 春 记 忆10 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
动力 continue10 小时前
Linux 基础篇 · 压缩打包与用户管理
linux·服务器·基础命令linux
牢姐与蒯12 小时前
Linux基础开发工具之版本控制器git
git
NJCloud12 小时前
Ansible(三)——Zabbix 监控系统部署与敏感信息加密
linux·运维·chrome·信息可视化·ansible·zabbix