Github科研项目用法
- 常见问题
- [Git 全局配置方式](#Git 全局配置方式)
-
- [分别配置 用户名 和 邮箱](#分别配置 用户名 和 邮箱)
- 验证是否配置成功
- [当前Git 仓库绑定GitHub仓库](#当前Git 仓库绑定GitHub仓库)
-
- 初始化
- [绑定 GitHub](#绑定 GitHub)
- 验证远程仓库是否真正可用
- 检查
- [SSH Key 添加到 GitHub 账户](#SSH Key 添加到 GitHub 账户)
- 重新绑定仓库
- [.gitignore 模板(深度学习项目专用)](#.gitignore 模板(深度学习项目专用))
-
- [方法一 Git bash命令行创建](#方法一 Git bash命令行创建)
- [方法二 资源管理器创建](#方法二 资源管理器创建)
- 创建分支
- 查看分支
- 切换分支
- 删除分支
-
- [删除 Git 分支](#删除 Git 分支)
- [将文件或文件夹上传到 GitHub 的 指定分支](#将文件或文件夹上传到 GitHub 的 指定分支)
- 本地和github分支是否一致
- [规范 Git 提交习惯](#规范 Git 提交习惯)
-
- [一次提交 = 一件独立的事](#一次提交 = 一件独立的事)
- 提交必须写清楚"你做了什么"
- 不要把垃圾提交到仓库
- [标准科研 Git 工作流](#标准科研 Git 工作流)
- [git add .](#git add .)
- Commits提交规范
- [在 PyCharm 中手动指定 Git 路径](#在 PyCharm 中手动指定 Git 路径)
-
- [PyCharm 中的 Git 行为逻辑](#PyCharm 中的 Git 行为逻辑)
- 服务器拉取仓库
- [在 Git 中更新代码/提交本地修改/推送到github](#在 Git 中更新代码/提交本地修改/推送到github)
- git推送指定的文件
-
- 将指定文件加入暂存区
- [提交(只会提交刚才 add 的文件)](#提交(只会提交刚才 add 的文件))
- 推送到远程仓库
- 删除文件
- [将某个目录加入 `.gitignore`,并确保 GitHub 不再跟踪它(同时本地不删除)](#将某个目录加入
.gitignore,并确保 GitHub 不再跟踪它(同时本地不删除)) -
- [删除 GitHub 上和本地文件](#删除 GitHub 上和本地文件)
- 只删除远程,不动本地
- 删除多个文件夹
- [Git 恢复版本方法](#Git 恢复版本方法)
- 对文件进行移动、重命名、修改
常见问题
如果修改了github仓库名,需要重新绑定仓库才能正常推送吗?
不需要重新绑定,大部分情况 无需重新配置远程仓库即可正常推送。
GitHub 在你修改仓库名后,会自动保持一个 永久重定向(301 redirect),指向新的仓库 URL。
需要手动更新 remote URL的情况:
希望 remote 显示新的仓库名
例如现在 remote 显示:origin https://github.com/you/oldname.git,想把它改成:origin https://github.com/you/newname.git,执行
bash
git remote set-url origin https://github.com/你的用户名/新仓库名.git
无法切换分支
bash
error: The following untracked working tree files would be overwritten by checkout:
当前目录下有未提交的修改,如果切换分支会导致它们被覆盖,Git 会自动阻止分支切换。
步骤 1:把文件夹加入 .gitignore
步骤 2:清理 Git index(不会删本地文件)
bash
git rm -r --cached .
git add .
git commit -m "Clean index and ignore local folders"
Git 全局配置方式
分别配置 用户名 和 邮箱
bash
git config --global user.name "用户名"
git config --global user.email "邮箱"
验证是否配置成功
bash
git config --global --list
当前Git 仓库绑定GitHub仓库
初始化
切换到当前目录
bash
cd /当前目录
当前目录还不是 Git 仓库,需要先初始化
bash
git init
绑定 GitHub
bash
git remote add origin git@github.com:你的用户名/你的仓库名.git
验证远程仓库是否真正可用
bash
git fetch origin
没有报错,远程仓库连接正常
检查
bash
git remote -v
SSH Key 添加到 GitHub 账户
检查你本机是否已有 SSH Key
bash
ls ~/.ssh
生成新的 SSH Key(如上一步没有key)
bash
ssh-keygen -t ed25519 -C "邮箱"
复制公钥
bash
cat ~/.ssh/id_ed25519.pub
复制输出的 整一行内容
添加到 GitHub
GitHub------Settings------SSH and GPG keys------New SSH key
测试 SSH 是否已打通
bash
ssh -T git@github.com
重新拉取远程仓库
bash
git fetch origin
重新绑定仓库
一、确认当前本地仓库状态
bash
git status
git remote -v
二、场景 1:本地已有 Git 仓库,只是要换一个 GitHub 仓库
bash
# 删除原有远程仓库绑定
git remote remove origin
# 验证
git remote -v
# 若无输出,说明已成功解绑
bash
# 添加新的 GitHub 仓库地址(SSH方式)
git remote add origin git@github.com:用户名/新仓库名.git
.gitignore 模板(深度学习项目专用)
方法一 Git bash命令行创建
bash
# 在项目根目录执行
touch .gitignore
# 编辑
nano .gitignore
方法二 资源管理器创建
注:.gitignore 不是 .txt 文件,它是一个没有后缀名的纯文本文件
步骤一:在项目根目录创建文件
bash
.gitignore
步骤二:复制以下内容
bash
# ===================================
# Python 缓存文件
# ===================================
__pycache__/
*.py[cod]
*$py.class
# ===================================
# 虚拟环境 (venv/conda/env)
# ===================================
env/
venv/
.venv/
ENV/
env.bak/
.conda/
# ===================================
# IDE 配置 (PyCharm, VSCode)
# ===================================
.idea/
.vscode/
*.code-workspace
# ===================================
# Jupyter Notebook 检查点
# ===================================
.ipynb_checkpoints/
# ===================================
# 日志文件
# ===================================
*.log
logs/
tensorboard/
runs/ # PyTorch TensorBoard 默认输出目录
# ===================================
# 数据集 / 原始 wav / 图像文件
# 请不要把真实数据推到 GitHub
# ===================================
datasets/
data/
*.wav
*.mp3
*.flac
*.png
*.jpg
*.jpeg
*.bmp
*.tiff
# ===================================
# 特征图像(Mel、GAF、GASF、GADF)
# ===================================
datasets_mel*/
features/
spectrogram/
mel_spectrogram/
gasf/
gadf/
gaf/
# ===================================
# 模型权重、大文件
# ===================================
*.pth
*.pt
*.ckpt
*.weights
# ===================================
# 训练中产生的中间文件
# ===================================
*.npy
*.npz
*.pkl
*.pickle
*.h5
# ===================================
# 压缩包 / 临时文件
# ===================================
*.zip
*.tar.gz
*.rar
*.7z
*.bak
*.tmp
*.temp
# ===================================
# 输出结果
# ===================================
output/
results/
figures/
# ===================================
# 本地配置文件
# ===================================
config.yaml
config.json
*.local
.env
*.ini
# ===================================
# 系统文件
# ===================================
.DS_Store
Thumbs.db
步骤三:推送到github(必须)
bash
git add .gitignore
git commit -m "chore: add .gitignore to define ignore rules"
git push origin main
# 如果主分支不是 main,而是 dev
# git push origin dev
bash
# 清除 Git 之前跟踪的无用文件,按新的 `.gitignore` 规则重新跟踪文件。
git rm -r --cached .
git add .
git commit -m "apply gitignore"
git push
创建分支
注:Git 终端显示的分支是"本地当前检出分支",无论你是否连接 GitHub,Git Bash 的提示符 永远只显示当前检出的本地分支。
对于:项目唯一开发者、项目结构简单、希望直接修改 main 分支、每次改动影响较小,不需要创建分支
科研项目推荐 Git 分支结构
bash
main
│
├── dev
│ │
│ ├── feature/mvdr_beamforming
│ ├── feature/noise_reduction_enhancement
│ ├── feature/stft_mel_extractor
│ ├── feature/gasf_gadf_extractor
│ ├── feature/pinn_model
│ ├── feature/pcnn_module
│ ├── feature/tensorboard_logger
│ ├── feature/phys_field_feedback
│ └── feature/evaluation_metrics
│
└── experiment/
├── experiment/1-array-design
├── experiment/2-mvdr-denoise
├── experiment/3-feature-mel
├── experiment/4-feature-gasf
├── experiment/5-feature-gadf
├── experiment/6-model-vggse
├── experiment/7-model-resnet18
├── experiment/8-model-lenet
├── experiment/9-model-pcnn_pinn
└── experiment/10-phys-feedback
分支下创建子分支
bash
# main下创建dev分支
git checkout -b dev
git push -u origin dev
# dev下创建feature分支
git checkout dev
git checkout -b feature/mvdr_beamforming
git push -u origin feature/mvdr_beamforming
# master下创建experiment分支
git checkout master
git checkout -b experiment/3-feature-mel
git push -u origin experiment/3-feature-mel
科研项目分支
main(主分支):保存最稳定、能复现论文结果的版本;能正常运行、无报错;用于最终提交、论文复现代码
dev(开发分支):所有新功能优先合并到 dev,是 main 的"候选版本"
feature 分支(按模块拆分):开发独立功能,不影响 dev 和 main
experiment 分支(特别适合科研):保存每个实验组的配置;方便多次回溯;执行 A/B 对照时非常方便;图像分类任务不同实验不会互相影响
查看分支
查看本地所有分支
bash
git branch
(带*的是当前分支)
查看所有远程分支
bash
git branch -r
查看本地 + 远程所有分支
bash
git branch -a
如何判断该本地分支是否与 GitHub 的远程分支关联
bash
git branch -vv
左边是本地分支,中括号内是它的 remote tracking branch(远程跟踪分支)。如果没有中括号,则代表:本地分支与远程分支暂时没有 tracking 关系
切换分支
切换到已存在的本地分支
bash
git checkout 目标分支名
切换到远程分支
bash
git switch -c 本地分支名 origin/远程分支名
删除分支
删除 Git 分支
删除 Git 分支分为两类:删除本地分支 和 删除远程分支(GitHub上的)
一、删除本地分支
bash
# 如果分支已经被合并
git branch -d 分支名
# 强制删除
git branch -D 分支名
二、删除远程分支
bash
git push origin --delete 分支名
将文件或文件夹上传到 GitHub 的 指定分支
一、检查当前所处的分支
bash
# 带 * 的就是当前分支
git branch
# 如果你不在目标分支,请切换
git checkout 分支名
二、把文件或文件夹放到项目目录中
将你的文件/文件夹直接复制进本地项目目录即可
三、添加文件到暂存区
bash
git add 文件名
# 添加所有更改
git add .
四、提交 commit
bash
git commit -m "feat: add new_data folder"
五、推送到指定分支
bash
git push origin 分支名
注:分支之间互不影响,除非你主动 merge 或开 PR
本地和github分支是否一致
创建分支后,本地和 GitHub 分支不用一直一致。但在推送、删除文件、修改历史时,本地分支必须要和github上的分支保持一致。
bash
# 先 pull → 拉取远程文件夹 → 本地出现这个目录 → 才能 执行 rm 删除,push 到远程、切换分支等操作
git pull origin feature/mvdr_beamforming
规范 Git 提交习惯
一次提交 = 一件独立的事
- 一次只改 一个功能点
- 一次只完成 一个实验改动
- 一次只完成 一个模块
提交必须写清楚"你做了什么"

restore 恢复到某一版本
delete
feat: add PCNN feature extractor
model: replace AlexNet with ResNet18 backbone
train: add Laplacian regularization to PINN loss
data: fix class order in MelSpectrogramDataset
viz: add t-SNE visualization for test features
exp: add experiment group paper3-4 vs paper4-4
fix: fix dimension mismatch in GAF input
doc: update README with dataset structure
不要把垃圾提交到仓库
- .pt .pth 大模型权重
- pycache/
- .idea/
- 临时测试文件
标准科研 Git 工作流
每次改代码,固定 4 步:
- git status
- git add .
- git commit -m "类型: 一句话说明"
- git push
git add .
git add .表示:把当前目录以及所有子目录中的所有修改(新增、修改、删除)全部加入暂存区。
也就是说你修改过的文件、你新增的文件、你删除的文件,全部被 Git 标记为"将要提交的内容"。
它不会提交、推送、清空任何文件、改变历史记录,仅仅是把修改暂存起来,准备提交。
Commits提交规范
bash
git add .
git commit -m "feat(training): add Laplacian physics regularization" \
-m "- 为了提升模型对物理一致性的约束,需要在训练阶段加入拉普拉斯正则项" \
-m "- 在 train.py 中集成 physics_loss,并添加对应的 config 参数选项" \
-m "- 改进后训练曲线更稳定,模型在测试集的 G-Mean 与 F1-score 均有提升"
在 PyCharm 中手动指定 Git 路径
bash
File → Settings → Version Control → Git
Git可执行文件路径E:\software_install\Git\Git\cmd\git.exe,点击右侧test
PyCharm 中的 Git 行为逻辑
注:在 PyCharm 中指定了 Git(设置好 VCS = Git)之后,你在 PyCharm 中所做的所有代码操作都只作用于本地仓库,不会自动影响远程 GitHub。这是所有 Git 客户端(PyCharm、VSCode、Git Bash)的标准行为。只有执行 Pull / Fetch 时才与 GitHub 通信
通过Git更改pycharm中的文件后,.wav文件和.png文件可能会被损坏
- 你在 PyCharm 修改代码 → 只影响本地工作区(Working Directory)
- 你在 PyCharm 使用 commit → 只产生本地 commit
- 你在 PyCharm 使用 push → 才会上传到 GitHub
- 你在 PyCharm 切换分支 → 只切换本地分支
服务器拉取仓库
测试SSH连接
bash
ssh -T git@github.com
克隆仓库
git clone git@github.com:用户名/仓库名.git
在 Git 中更新代码/提交本地修改/推送到github
拉取仓库更新
bash
# 进入仓库目录
cd 仓库名
# 拉取主分支
git pull
# 拉取指定分支
git pull origin dev
提交本地修改(仓库目录内执行)
bash
# 进入仓库目录
cd 仓库名
# 查看哪些文件被修改/新增
git status
# 查看具体修改内容
git diff
# 提交所有修改
git add .
# 仅提交指定文件
git add 文件名1 文件名2
# 提交到本地仓库
git commit -m "类型: 一句话说明"
推送到Github远程仓库
bash
# 推送到默认主分支
git push orign main
git推送指定的文件
将指定文件加入暂存区
bash
# 推送某一个文件
git add path/to/your_file.m
# 添加多个文件
git add file1.m file2.m file3.m
# 添加某个目录
git add src/
# 添加全部改动
git add .
提交(只会提交刚才 add 的文件)
bash
git commit -m "feat: update only selected files"
推送到远程仓库
bash
# 默认分支
git push
# 指定分支
git push -u origin 分支名
删除文件
将某个目录加入 .gitignore,并确保 GitHub 不再跟踪它(同时本地不删除)
一、在 .gitignore 中加入目录
bash
# 如果这些目录之前已经被 Git 跟踪,必须取消对它们的跟踪
git rm -r --cached others signal_analysis old_code
# 假设目录名是 others/, 编辑 .gitignore
others/
二、提交变更
bash
git commit -m "chore: untrack ignored directories"
三、推送到 GitHub
bash
git push
推送后,这些目录会从 GitHub 消失,但本地仍然存在
四、验证是否生效
bash
git status
如果 .gitignore 设置正确且取消跟踪成功,这些目录不会再显示在变更列表中。
删除 GitHub 上和本地文件
步骤 1:在本地仓库中删除 GitHub 版本的文件
进入你的本地 Git 仓库文件夹,在里面删掉目标文件
bash
rm data.txt
或使用资源管理器直接删除
步骤 3:更新 Git 状态
bash
git add .
步骤 4:提交删除记录
bash
git commit -m "delete file from repository only"
步骤 5:推送到 GitHub
bash
git push
只删除远程,不动本地
保持本地文件仍然留在项目目录里,但 GitHub 删除它(并停止跟踪)
步骤1:使用缓存删除文件(不删除本地)
bash
# 删除文件
git rm --cached filename
# 删除文件夹
git rm -r --cached filename
本地文件不会被删除,只是退出 Git 版本控制
步骤2:提交
bash
git commit -m "remove file from GitHub repo but keep local file"
步骤 3:推送到 GitHub
bash
git push
删除多个文件夹
同上,用 git rm --cached 取消跟踪(不删除本地文件)
bash
git rm -r --cached array MVDRBeamformerHDLOptimizedExample SMIR-Generator Signal-Generator
git commit -m "chore: untrack folders (array, MVDRBeamformerHDLOptimizedExample, SMIR-Generator, Signal-Generator)"
git push
GitHub 上文件消失,但本地文件保留
Git 恢复版本方法
包括恢复单个文件、恢复整个项目、回退 commit、撤销 push 等
一、查看历史版本
bash
git log --oneline
记住你想恢复的 版本号前 7 位
二、恢复"单个文件"到某个版本(常用)
bash
git checkout 7b8d123 -- matlab/mvdr_main.m
git add .
git commit -m "restore mvdr_main.m to version 7b8d123"
git push
三、恢复整个项目到某一版本.
bash
# 1. 软回退(保留修改)只是把 HEAD 指针指回去,但你写的代码还留着
git reset --soft 7b8d123
# 2. 混合回退(默认)
git reset 7b8d123
# 3. 硬回退(彻底恢复,丢弃本地修改)
git reset --hard 7b8d123
推送强制同步
git push -f
四、恢复某一 commit 然后继续向前(推荐科研项目)
bash
# 撤销某次修改,但保留历史。会生成一个新的 commit,把该版本的更改"反做"
git revert 7b8d123
git push
恢复文件夹
注:要恢复文件夹,需要使用删除"之前"的那个 commit

bash
git checkout d6fe0a3 -- others
git commit -m "restore 'others'"
git push origin HEAD:master
# 使用"git pull"来更新你的本地分支
git pull
对文件进行移动、重命名、修改
你在本地项目根目录对文件进行移动、重命名、修改、删除,只要 Commit + Push 到 GitHub,GitHub 上的仓库就会同步发生相同的变化。
移动/重命名文件
bash
# 重命名文件
git mv old_name.py new_name.py
# 移动文件到某个文件夹
git mv mvdr/main.m matlab/mvdr_main.m
# 移动整个目录
git mv matlab_scripts matlab/
# 确认所有更改
git status
# 推送到 GitHub
git add .
git commit -m "refactor: reorganize project structure"
git push