Skip to main content

第 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 身份验证

步骤一:创建仓库

image-20250805132317286

创建后可以看到推荐的远程链接的提示

  • 第一块是本地没有这个仓库,新建一个
  • 第二块是本地也有一个仓库

image-20250805132334528

同时我们也看到了两个按钮,HTTPS和SSH,一般选择SSH地址

这样的好处是不用每次都输入用户名密码

image-20250805132353117

步骤二:设置SSH 秘钥

使用SSH连接需要创建SSH秘钥

进入根目录

cd ~/
cd .ssh

创建ssh秘钥,-t 制定协议未rsa, -b 指定大小为4096

ssh-keygen -t rsa -b 4096

image-20250805132429988

这时如果之前没做过这一步,在.ssh目录下会生成id_rsa文件,直接回车就好了

如果之前做过了,则需要输入一个新的文件名用来保存秘钥,否则会覆盖之前的id_rsa文件

image-20250805132740897

这里没有给这个文件设置密码

从上图中我们也可以看到,秘钥的保存路径是 /c/Users/28121/.ssh/


所以我们前往这个地址,可以看到两个文件了

  • 没有拓展名的是私钥文件,不可以分享

  • 有.pub 后缀的是公钥文件,需要上传github

image-20250805132819161

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

image-20250805132845411

如果之前是新创建了一个文件用来保存SSH秘钥,则还需要做一步操作

需要创建一个config文件(就叫config,没有后缀),并把下面这五行添加进去

这5行的意思是制定github使用的秘钥在test路径下(test是上面自己输入的文件名)

image-20250805132909080

步骤三:关联仓库

方法一:已有 .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

image-20250805132945216

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

image-20250805133010392

这样就是克隆成功了

image-20250805133021299


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