Skip to content

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 ​

  1. 生成密钥(如果使用服务器时已经生成过,可以直接用):ssh-keygen -t ed25519
  2. 复制公钥内容:cat ~/.ssh/id_ed25519.pub
  3. 在 GitHub 网页:右上角头像 → Settings → SSH and GPG keys → New SSH key,粘贴保存。
  4. 测试: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 编程助手。

学习资料 ​

作者:崔涵帅、姚智、王振胜、唐志清 · 边缘智能系统实验室