第 43 课:Git 与 GitHub 入门
🎯 核心实操目标
通关要求:终结”毕业论文_终稿_打死不改绝对终稿3.docx”的版本灾难。本课你将掌握 Git 的核心概念(仓库/暂存区/提交/分支)与基础操作(init / add / commit / push),用 GitHub 把论文与代码托管成带完整时间戳与可回溯历史的版本库。
📋 课前准备(5 分钟自检)
账号
- [ ] GitHub 账号:github.com/signup(免费)
- [ ] 如墙问题导致 GitHub 注册困难 → 用 **Gitee(码云)**作为国内替代:gitee.com
工具/环境
- [ ] Git 命令行:git-scm.com/downloads(Windows 安装时勾选”Git Bash Here”)
- [ ] GitHub Desktop(可选 GUI 客户端,零基础推荐):desktop.github.com
- [ ] VS Code(推荐 IDE,内置 Git 集成)
配置(首次安装后必做)
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global core.quotepath false # 避免中文文件名乱码应急通道
- 命令行恐惧 → 全程使用 GitHub Desktop 图形界面,效果一样
- SSH key 配置失败 → 用 HTTPS + Personal Access Token 推送
- 网络问题 → 用 Gitee 替代,或配置 GitHub 镜像代理
场景痛点破冰:你的电脑硬盘是一颗定时炸弹
“你连续熬夜了三个通宵,写出了第五版的论文初稿。你发给了导师。 导师说:‘我看了看,还是觉得你这礼拜一发我的第三版写得更有深度,在这个基础上加几句吧。’ 你看着桌面上那一堆为了怕搞混而重命名的《论文副本》、《论文旧版_别看》,陷入了绝望——你根本想不起来第三版和第五版之间,你到底删除了哪些核心论据。
科研人员缺乏版本控制意识,就像古代人用竹简搬运数据还要防着虫鼠乱咬。今天,抛弃微信文件互传,踏入版本追踪的上帝视角。”
🗺️ 架构重组:线性不可逆的时间轴折叠
永远只留一个名为“论文_main”的文件,背后的每一次保存都是一次“灵魂快照盖章(Commit)”:
🚀 拆解实战:文史生也能秒杀的 GitHub Desktop 部署
📋 无代码零门槛场景:Git 是全球最强的防丢工具。在电脑崩溃断电、勒索病毒加密、导师心血来潮全部作废的各种高强度场景,它都能在 1 秒钟把你从地狱捞回来。
动作一:放弃全黑代码界面,拥抱可视化客户端
去官方下载极其漂亮的桌面客户端:GitHub Desktop。 用这个软件,你不需要去背任何晦涩难懂的 git pull/push/commit 终端敲打指令,你只需要在这个软件上点击白色的按钮。
动作二:监控与盖章 (Commit 仪式)
- 在软件中点击
Create a New Repository (新建云端仓库),将你的论文保存区托付给它的雷达监控仪。 - 你在 Word / Markdown 里疯狂码字删减。
- 一旦当你结束了一批非常满意的段落输出,切回到 GitHub Desktop。这神奇的一幕会出现:你在论文里加上的字变成了充满生机的 [绿色+],你刚才犹豫而删掉的段落变成了 [红色-] 保存着。
- 在左下角,郑重其事地敲下你的【盖章确认签名】(如:完成了问卷反向题部分的说明段)。点击
Commit to main。
动作三:时空回溯召唤大法
如果三天后,导师说之前的版本更好。 你只需要在这个软件的 History 时间线面板里,对着三天前那个盖章版本轻轻右键:Revert this commit (推翻此阶段变更)。 你的论文文件夹将在一瞬间倒流、复原至一字不差的三天前!
⌨️ 命令行最小回路:从零到云端(可复制 + 真实回显)
GitHub Desktop 的按钮背后就是这几行命令。下面这套“从空文件夹到云端有历史”的最小回路,照着敲一遍,你就理解了 init / add / commit / push 到底发生了什么。所有命令都可直接复制;命令下方贴的是终端真实回显的样子(commit hash 是 7 位短哈希,你本机生成的会不同)。
第 1 步:建仓库,造第一份正文
mkdir paper && cd paper # 新建论文文件夹并进入
git init # 把当前文件夹变成一个 Git 仓库回显(Git 2.30+ 默认主分支名为 main):
Initialized empty Git repository in /Users/you/paper/.git/此时新建一份 paper.md(就是你的论文正文,先写引言):
# paper.md 内容示例(焦虑量表反向计分研究,对应 Case A)
# 引言
本研究探讨 Anxiety_4_R 反向计分对量表内部一致性的影响。第 2 步:看状态 → 暂存 → 提交盖章
git status # 看看 Git 现在“眼里”有什么回显——paper.md 是**未被追踪(Untracked)**的红色文件:
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
paper.md
nothing added to commit but untracked files present (use "git add" to track)把它放进暂存区(Staging Area),再盖章提交:
git add . # 把改动放进暂存区(. 表示当前目录所有改动)
git commit -m "写完引言" # 盖章:这一刻的快照被永久记录commit 的真实回显(3f8a1c2 是本次生成的短哈希,你的会不同):
[main (root-commit) 3f8a1c2] 写完引言
1 file changed, 3 insertions(+)
create mode 100644 paper.md第 3 步:用 log 查看你的时间轴
再改一次正文(比如补上方法段、删掉一条假设),git add . + git commit -m "补方法段,删除 H3 假设" 之后,看历史:
git log --oneline # 一行一个 commit,最上面是最新的回显——每行 = 一次盖章,左边是短哈希、右边是你写的说明:
9b2e7d4 (HEAD -> main) 补方法段,删除 H3 假设
3f8a1c2 写完引言如果想看带时间戳的完整信息:
git log --pretty=format:"%h %ad %s" --date=format:"%Y-%m-%d %H:%M"9b2e7d4 2026-06-07 21:48 补方法段,删除 H3 假设
3f8a1c2 2026-06-07 20:15 写完引言到这里你已经拥有了一条带完整时间戳、可回溯的本地历史——这正是开篇承诺的“上帝视角”。
🧹 论文仓库 .gitignore 模板(填好可直接用)
把下面的内容存成仓库根目录的 .gitignore 文件,Git 就会自动无视这些文件,git status 里再也不会冒出一堆噪音。这是一份已经填好的真实模板,按论文场景注释:
点击展开:论文仓库 .gitignore 完整范例
# ===== Word / Office 临时文件 =====
~$*.docx # Word 打开文档时生成的锁文件(见下方说明)
~$*.doc
~$*.xlsx
*.tmp # 各类临时文件
# ===== Python / Notebook 中间产物 =====
__pycache__/ # Python 字节码缓存目录,纯机器产物,无需进版本库
*.pyc
.ipynb_checkpoints/ # Jupyter 自动保存的检查点,会反复变动制造噪音
# ===== 大数据文件(不进 Git,单独备份)=====
/data/ # 原始数据目录:问卷 CSV、SPSS .sav 等大文件不入库
*.sav
*.zip
# ===== 系统杂物 =====
.DS_Store # macOS 目录元数据
Thumbs.db # Windows 缩略图缓存为什么 Word 临时文件(~$*.docx)必须忽略? 当你用 Word 打开 论文.docx 时,同目录会瞬间生成一个名为 ~$论文.docx 的隐藏锁文件,用来记录“谁正在编辑、防止两人同时改”。它有两个麻烦:① 你一关闭 Word 它就消失,于是 git status 永远在“多出一个文件 / 又少了一个文件”之间反复横跳,制造无意义的提交噪音;② 它内含编辑者用户名等本地信息,不该被提交到云端。所以把 ~$*.docx 写进 .gitignore,让 Git 彻底当它不存在。
大文件为何也忽略?
/data/里的问卷原始数据动辄几十 MB,Git 擅长追踪文本差异、不擅长存二进制大文件。原始数据应单独归档备份,版本库只追踪你的正文、代码与分析脚本。
⏪ 命令行取回旧版正文:log 找 hash → checkout 单文件还原
GitHub Desktop 的 Revert 是“整次提交全部推翻”。命令行更精细:只把某一个文件还原到历史上的某一版,其它文件原封不动。这正是“导师说第三版的引言更好,只要那一段”的标准场景。
对照演示——假设当前 paper.md 引言已被你改乱,想取回“写完引言”那一版的正文:
# ① 先用 log 找到目标版本的短哈希
git log --oneline9b2e7d4 (HEAD -> main) 补方法段,删除 H3 假设
3f8a1c2 写完引言 ← 就要这一版的 paper.md# ② 用 checkout <hash> -- <文件> 只取回这一个文件的旧版正文
git checkout 3f8a1c2 -- paper.md| 操作 | 影响范围 | 适用场景 |
|---|---|---|
git checkout <hash> -- paper.md | 只把 paper.md 还原到该提交的版本,其它文件不动,历史不被改写 | 只想找回某一段旧正文 |
Revert this commit(Desktop) | 把整次提交的所有改动反向抹掉,并生成一条新提交 | 想整体撤销某次提交 |
执行后 paper.md 已是旧版内容,但它现在处于“已修改待提交”状态,确认满意后照常 git add . && git commit -m "引言回退到 3f8a1c2 版本" 即可把这次回退也记入历史。
☁️ 首次推送到云端:remote add → push,以及常见报错处理
本地有了历史,最后一步是推到 GitHub(或 Gitee)。先在网站上新建一个空仓库(不要勾选自动生成 README,否则首次推送会冲突),复制它给你的仓库地址,然后:
git remote add origin https://github.com/你的用户名/paper.git # 绑定云端地址,别名 origin
git branch -M main # 确保本地主分支叫 main
git push -u origin main # 首次推送,-u 记住关联,以后直接 git push成功的真实回显大致如下:
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Writing objects: 100% (6/6), 412 bytes | 412.00 KiB/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To https://github.com/你的用户名/paper.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.HTTPS / PAT 首次推送的常见报错与处理
如今 GitHub 的 HTTPS 推送不能再用账户密码,必须用 Personal Access Token(PAT)。下面是真实会遇到的报错原文与对策:
| 报错原文(节选) | 原因 | 处理 |
|---|---|---|
remote: Support for password authentication was removed. fatal: Authentication failed for '...' | 还在用网页登录密码推送 | 到 GitHub → Settings → Developer settings → Personal access tokens 生成一个 token,推送时弹出的“密码”框里粘贴 token而非密码 |
error: remote origin already exists. | git remote add origin 重复执行了 | 改用 git remote set-url origin <新地址> 覆盖,或先 git remote remove origin 再加 |
! [rejected] main -> main (fetch first) | 云端仓库非空(建仓时勾了 README),本地落后 | 先 git pull origin main --allow-unrelated-histories 合并,再 git push |
fatal: unable to access '...': Failed to connect ... port 443 | 网络无法连通 GitHub | 改用 Gitee 仓库地址,或配置代理后重试(见课前“应急通道”) |
Updates were rejected because the remote contains work that you do not have | 同上,远端有你本地没有的提交 | git pull --rebase origin main 后再推 |
PAT 一次配好、长期省心:在 token 弹窗里粘贴一次后,Windows 凭据管理器 / macOS 钥匙串会帮你记住,之后
git push不再反复问密码。token 形如ghp_xxxxxxxxxxxxxxxxxxxx,请妥善保管、不要写进任何会被提交的文件(这也是上面.gitignore要忽略敏感文件的延伸理由)。
📦 本课交付物(提交给 AI 初审/讲师抽检)
按本节实操任务完成并提交以下内容,AI 初审 + 讲师抽检按 Module_Rubrics.md 对应维度评分:
- [ ] 本节实操产出:本节任务区块要求的具体文件 / 文本 / 截图
- [ ] AI 协作日志:至少 1 段完整的"任务描述 → AI 输出 → 人工修正"对话记录
- [ ] 四维质检记录:用
Course_QA_Checklists.md(事实/逻辑/格式/引用)核查本节 AI 输出的笔记 - [ ] 沉淀模板:将本课关键 Prompt / 流程 / 检查清单加入你的个人工具箱
🏁 小结与自测 (Milestone Checklist)
- [ ] 我已经彻底放弃了每改一次论文就重新拖拉拽复制重命名一个 Word 文档的落后手工作业。
- [ ] 我理解了 Git 这个时间胶囊的神圣机制,知道所有的改动只要经过了
Commit盖章就不会产生物理消亡。 - [ ] 如果由于数据造假争议被人质疑,我敢于打开历史记录向盲审系统举证我的文稿确实是经历了这四个月一天天打磨演进的心血成果!
