深色模式
Git 与 GitHub
Git 记录代码的每一次修改,可以随时回到过去的任意版本;GitHub 是存放 Git 仓库、和别人协作的网站。几乎所有论文代码都发布在 GitHub 上,你的实验代码、笔记也应该用 Git 管理。
核心概念
| 概念 | 说明 |
|---|---|
| 仓库(repository) | 一个被 Git 管理的项目文件夹 |
| 提交(commit) | 一次保存的快照,附带一句说明。可以随时回到任意一次提交 |
| 暂存(stage) | 选出这次要提交哪些修改(git add) |
| 分支(branch) | 一条独立的开发线。在新分支上尝试新想法,不影响主线 |
| 远程仓库(remote) | 放在 GitHub 等网站上的仓库副本,通常叫 origin |
| 拉取请求(Pull Request,PR) | 请求把你分支上的修改合并到主线,别人可以先审阅 |
安装与配置
bash
sudo apt install git # Ubuntu / WSL;Mac 用 brew install git
git config --global user.name "Zhang San"
git config --global user.email "你注册 GitHub 用的邮箱"
git config --global init.defaultBranch main用 SSH 连接 GitHub
- 生成密钥(如果使用服务器时已经生成过,可以直接用):
ssh-keygen -t ed25519 - 复制公钥内容:
cat ~/.ssh/id_ed25519.pub - 在 GitHub 网页:右上角头像 → Settings → SSH and GPG keys → New SSH key,粘贴保存。
- 测试:
ssh -T git@github.com,看到Hi 用户名!就成功了。
国内访问 GitHub
网络不稳定、22 端口被拦截时,可以让 SSH 走 443 端口。在 ~/.ssh/config 里加上:
text
Host github.com
HostName ssh.github.com
Port 443
User git网页打不开或下载太慢时,很多热门项目在 Gitee 上有镜像。
日常工作流程
新建自己的仓库
bash
mkdir my-notes && cd my-notes
git init
echo "# 我的科研笔记" > README.md
git add README.md
git commit -m "初始化笔记仓库"
# 在 GitHub 网页上新建一个空仓库(不要勾选添加 README),然后:
git remote add origin git@github.com:你的用户名/my-notes.git
git push -u origin main每天的循环
bash
git status # 看看改了哪些文件
git diff # 看具体改了什么
git add 文件名 # 选择要提交的修改(git add . 表示全部)
git commit -m "说清楚这次改了什么"
git push # 推送到 GitHub
git pull # 拉取别人(或你在另一台机器上)的最新修改
git log --oneline # 查看提交历史用分支尝试新想法
bash
git switch -c try-new-cache # 新建并切换到分支
# 修改、提交……
git push -u origin try-new-cache # 推送分支,然后在 GitHub 上发起 Pull Request
git switch main # 回到主线复现别人的代码
bash
git clone https://github.com/作者/仓库.git
cd 仓库
git log -1 # 记下当前的提交号,写进复现报告.gitignore
有些文件不应该进入仓库:大文件、自动生成的文件、隐私信息。在项目根目录建一个 .gitignore:
text
# Python
__pycache__/
*.pyc
.venv/
# 数据、模型、实验输出(体积大,不要提交)
data/
models/
results/
*.safetensors
*.pt
*.ckpt
# 系统与编辑器
.DS_Store
.vscode/
# 密钥和配置(绝对不能提交)
.env
*.key撤销操作
| 想做的事 | 命令 |
|---|---|
| 放弃某个文件还没提交的修改 | git restore 文件名(修改会丢失,先确认) |
| 把文件从暂存区撤回(保留修改) | git restore --staged 文件名 |
| 修改上一次提交的说明 | git commit --amend |
| 撤销上一次提交,但保留修改 | git reset --soft HEAD~1 |
| 撤销一次已经推送的提交 | git revert 提交号(生成一个反向提交,不改写历史) |
不熟悉的时候先 git status 看清楚状态再操作,不要随手用 git reset --hard 和 git push --force,它们会丢掉修改。
常见问题
- 合并冲突:两边改了同一处,
git pull时会提示冲突。打开冲突文件,找到<<<<<<<、=======、>>>>>>>标记的部分,保留正确的内容并删掉标记,然后git add和git commit。VS Code 会高亮冲突,提供“采用当前/采用传入”按钮。 - 不小心提交了大文件:push 会失败或仓库变得很大。在提交历史里删除大文件比较麻烦,最好一开始就写好
.gitignore。 - 不小心提交了密码或 API Key:立刻到对应网站作废这个密钥并重新生成,仅仅删除文件再提交是不够的,历史记录里还能找到。
GitHub 学生福利
在 GitHub Education 用学校邮箱或学生证认证后,可以免费使用 GitHub Copilot 等开发者工具,见 AI 编程助手。
学习资料
- Learn Git Branching:交互式图形化练习,理解分支最快的方式。
- Pro Git(中文版):官方推荐的免费书,前三章覆盖日常所需。
- Missing Semester 中关于版本控制的一讲,从 Git 的数据模型讲起。