第 1 课:基础用法
常用命令:
| 命令 | 功能 |
|---|---|
| git config --global user.name 用户名 | 设置用户签名 |
| git config --global user.email 邮箱 | 设置用户签名 |
| git init | 初始化本地库 |
| git status | 查看本地库状态 |
| git add 文件名 | 添加到暂存区 |
| git commit-m "日志信息" 文件名 | 提交到本地库 |
| git reflog/git log | 查看历史记录 |
| git reset --hard 版本号 | 版本穿梭 |
第一步:初始配置
任意打开一个git bash
设置用户名
git config --global user.name "Blackriver-T09"
设置邮箱
git config --global user.email heihet09@gmail.com
保存密码和邮箱,这样下次不需要重新输入
git config --global credential.helper store
查看git的所有配置
git config --global --list
第二步:新建版本库
仓库可以理解为一个目录,缩写是repo
创建一个仓库有两种方式:
- 本地已有仓库和
.git文件,和 github 空仓库关联起来 - 从 github 空仓库下载
.git文件,作为本地仓库的.git文件
这两种方法否需要先创建好线上仓库,以及配置好 github SSH 身份验证
步骤一:创建仓库

创建后可以看到推荐的远程链接的提示
- 第一块是本地没有这个仓库,新建一个
- 第二块是本地也有一个仓库

同时我们也看到了两个按钮,HTTPS和SSH,一般选择SSH地址
这样的好处是不用每次都输入用户名密码

步骤二:设置SSH 秘钥
使用SSH连接需要创建SSH秘钥
进入根目录
cd ~/
cd .ssh
创建ssh秘钥,-t 制定协议未rsa, -b 指定大小为4096
ssh-keygen -t rsa -b 4096

这时如果之前没做过这一步,在.ssh目录下会生成id_rsa文件,直接回车就好了
如果之前做过了,则需要输入一个新的文件名用来保存秘钥,否则会覆盖之前的id_rsa文件

这里没有给这个文件设置密码
从上图中我们也可以看到,秘钥的保存路径是 /c/Users/28121/.ssh/
所以我们前往这个地址,可以看到两个文件了
-
没有拓展名的是私钥文件,不可以分享
-
有.pub 后缀的是公钥文件,需要上传github

打开公钥文件,复制内容,打开github,在settings中添加秘钥

如果之前是新创建了一个文件用来保存SSH秘钥,则还需要做一步操作
需要创建一个config文件(就叫config,没有后缀),并把下面这五行添加进去
这5行的意思是制定github使用的秘钥在test路径下(test是上面自己输入的文件名)

步骤三:关联仓库
方法一:已有 .git 文件
先创建一个文件夹,进入后打开git bash,这个文件夹就是下面用的仓库
创建一个仓库
git init
可以看到这个目录下面出现了.git,这个也可以作为判断是否是仓库的标准
删除了.git文件夹,就会删除这个仓库,变成普通的文件夹
假设现在的线上 仓库地址是:
git@github.com:Blackriver-T09/Oridinis-Focus.git
进入你的本地项目目录,确认它是一个 git 仓库:
git status
如果不是:
git init
添加远程仓库(origin)
git remote add origin git@github.com:Blackriver-T09/Oridinis-Focus.git
验证:
git remote -v
应看到:
origin git@github.com:Blackriver-T09/Oridinis-Focus.git (fetch)
origin git@github.com:Blackriver-T09/Oridinis-Focus.git (push)
如果线上仓库是空的(最理想情况),直接推送:
git branch -M main
git push -u origin main
如果线上仓库已有 README / 提交历史,先拉取并合并:
git pull origin main --allow-unrelated-histories
解决冲突后:
git add .
git commit -m "merge remote and local histories"
git push -u origin main
如果在创建仓库时选择了加上 开源协议:
| License | 可商用 | 可闭源二次开发 | 是否强制开源 | 是否传染 | 署名要求 | 适合场景 |
|---|---|---|---|---|---|---|
| MIT | ✅ | ✅ | ❌ | ❌ | 仅保留版权 | 初创 / 工具库 / SaaS |
| BSD 2-Clause | ✅ | ✅ | ❌ | ❌ | 仅署名 | 和 MIT 类似 |
| BSD 3-Clause | ✅ | ✅ | ❌ | ❌ | 署名 + 不可背书 | 商用公司 |
| Apache 2.0 | ✅ | ✅ | ❌ | ❌ | 署名 + 变更说明 | 大型工程 |
| Boost 1.0 | ✅ | ✅ | ❌ | ❌ | 极简 | C++ 库常用 |
| CC0 | ✅ | ✅ | ❌ | ❌ | 无 | 放弃版权 |
| EPL 2.0 | ✅ | ❌(同模块) | 部分 | 弱 | 署名 | 企业协作 |
| GPL v3 | ✅ | ❌ | ✅ | 强 | 署名 + 开源 | 理想主义开源 |
| AGPL v3 | ✅ | ❌ | ✅(含 SaaS) | 最强 | 署名 + 开源 | 反 SaaS 私有化 |
| No license | ❌ | ❌ | ❌ | ❌ | 默认禁止一切 | 危险 |
那么即为本地 main 和远程 origin/main 各自都有提交(即“分叉 divergent”)时,直接 git pull 会失败,因为git pull 必须明确你要用 merge 还是 rebase 来对齐历史。
在你的仓库目录里直接执行:
git pull --no-rebase origin main
如果出现报错,说明本地仓库和 GitHub 仓库的历史完全无关(两个不同的 root commit),
而你这次 pull 没再带 --allow-unrelated-histories,Git 出于安全拒绝合并。
我们需要 一次性强制允许合并历史,并指定用 merge。
git pull origin main --allow-unrelated-histories --no-rebase
如果出现冲突(很可能是 LICENSE),查看冲突:
git status
打开冲突文件(通常是 LICENSE):
vim LICENSE
保留你想要的版本(建议保留 MIT License 那份),删掉:
<<<<<<< HEAD
=======
>>>>>>> origin/main
保存后:
git add LICENSE
git commit -m "Merge remote repository into local"
最后推送到 GitHub
git push -u origin main
方法二:下载 .git 文件
SSH配置已经完成,接下来进入原来的仓库目录
链接远程仓库的URL,把远程仓库克隆到本地
git clone git@github.com:Blackriver-T09/Heihe-CS-learning.git

注意这里要手动输入yes,会有提示如下

这样就是克隆成功了

SSH 问题解决:
有时候在 克隆时,会出现这个问题:
$ git clone https://github.com/Noetix-AI-platform/TreeChat.git
Cloning into 'TreeChat'...
Username for 'https://github.com': Blackriver-T09
Password for 'https://Blackriver-T09@github.com':
remote: Invalid username or token. Password authentication is not supported for Git operations.
fatal: Authentication failed for 'https://github.com/Noetix-AI-platform/TreeChat.git/'
输入账号的密码不成功。这是 GitHub 的正常安全策略变化导致的结果:GitHub 早就不允许用“账号登录密码”进行 HTTPS 的 Git 操作了。你在这里看到的 “Password” 位置,实际要输入的是 Personal Access Token(PAT)(或使用 SSH key),而不是你网页登录 GitHub 的密码。
解决步骤很简单,在上面把SSH公钥添加到 GitHub:Settings → SSH and GPG keys → New SSH key → 粘贴 之后
只需要进行验证
ssh -T git@github.com
Hi Blackriver-T09! You've successfully authenticated, but GitHub does not provide shell access.
然后句可以直接 clone了
git clone git@github.com:Noetix-AI-platform/TreeChat.git