Git与TortoiseGit使用教程:第二章 Git常用命令及TortoiseGit使用教程
Git与TortoiseGit使用教程
第一章 Git的安装及SSH公钥配置 第二章 Git常用命令及TortoiseGit使用教程 第三章 Gitee仓库同步到GitHub @TOC
前言
上一章介绍了Git的安装和SSH公钥配置,环境已经准备好了。本章接着讲实际怎么用,分两部分:
- Git常用命令:按使用场景整理,重点是"什么时候该用哪条",而不是把手册抄一遍;
- TortoiseGit(小乌龟) :把上面这些命令换成右键菜单操作,日常开发用它效率更高。 个人的建议是:命令行至少要能看懂,图形界面用来提效。因为出问题的时候(比如冲突、误回滚),网上给的解决方案九成九是命令行的;而日常提交、拉取这类重复操作,右键点两下确实比敲命令快。 本章环境同上一章:Windows 10/11 64位,远程仓库以Gitee为例。
一、先理清Git的工作流程
在敲命令之前,把上一章提到的四个区域再过一遍,所有命令都是在这四个区域之间搬运文件:
css
工作区 --git add--> 暂存区 --git commit--> 本地仓库 --git push--> 远程仓库
文件在Git眼中有四种状态:
| 状态 | 含义 | 如何进入下一步 |
|---|---|---|
| Untracked(未跟踪) | 新建的文件,Git还不管它 | git add |
| Modified(已修改) | 已跟踪的文件被改动了,但没加入暂存区 | git add |
| Staged(已暂存) | 已加入暂存区,等待提交 | git commit |
| Committed(已提交) | 已保存到本地仓库 | git push 推到远程 |
git status 这条命令的作用,就是随时告诉你每个文件现在处于哪种状态。遇到不确定的情况,先敲 git status ,它的提示信息里通常就带着下一步该用什么命令。 
二、Git常用命令及使用场景
1.创建仓库
场景一:本地已有项目,想纳入版本管理
在项目文件夹里右键 → Open Git Bash here:
bash
git init # 初始化,生成隐藏的.git目录
执行后目录下会多出一个 .git 隐藏文件夹,所有版本历史都存在这里,不要手动去删改它。
场景二:从远程仓库拉一份到本地(最常用)
bash
git clone git@gitee.com:用户名/仓库名.git # SSH方式(推荐)
git clone https://gitee.com/用户名/仓库名.git # HTTPS方式
git clone git@gitee.com:用户名/仓库名.git myproj # 指定本地文件夹名
git clone -b dev git@gitee.com:用户名/仓库名.git # 只克隆dev分支
在这里插入图片描述 
2.日常提交三连(用得最多)
bash
git add . # 把当前目录所有改动加入暂存区
git commit -m "修复串口接收丢包问题" # 提交到本地仓库,-m后面是提交说明
git push # 推送到远程仓库
git add 的几种用法:
bash
git add 文件名.c # 添加指定文件
git add *.c # 添加所有.c文件
git add src/ # 添加整个目录
git add . # 添加当前目录下所有改动(含新增、修改、删除)
git add -A # 添加整个仓库的所有改动
关于 git commit:
bash
git commit -m "提交说明" # 常规提交
git commit -am "提交说明" # add + commit 合并(仅对已跟踪文件有效,新文件不行)
git commit --amend # 修改上一次的提交说明(还没push时用)
git commit --amend --no-edit # 把当前改动并入上一次提交,说明不变
提交说明怎么写 :写清楚"改了什么、为什么改",别写"update""修改""1"这种。团队里常用的格式是
类型: 描述,例如:
makefilefeat: 增加ADC采样滤波功能 fix: 修复I2C超时导致的死循环 docs: 补充寄存器配置说明
3.查看状态与历史
bash
git status # 查看当前状态(最常用,多敲没坏处)
git status -s # 简洁模式输出
git log # 查看提交历史
git log --oneline # 一行一条,看起来清爽
git log --oneline --graph --all # 图形化显示分支走向,很实用
git log -3 # 只看最近3条
git log -p 文件名 # 查看某个文件的改动历史及具体内容
git diff # 工作区 vs 暂存区 的差异
git diff --cached # 暂存区 vs 最后一次提交 的差异
git diff HEAD # 工作区 vs 最后一次提交 的差异
git diff 分支A 分支B # 比较两个分支

4.撤销与回滚(重点,也是最容易搞砸的)
这部分建议单独记,用错命令可能真的会丢代码。 (1)改乱了工作区文件,想恢复到上次提交的样子
bash
git checkout -- 文件名 # 老写法
git restore 文件名 # 新写法(Git 2.23+,推荐)
git restore . # 恢复所有文件
⚠️ 这个操作不可恢复,工作区的改动会直接丢失,执行前确认清楚。
(2)git add 加错了,想从暂存区撤出来(但保留改动)
bash
git reset HEAD 文件名 # 老写法
git restore --staged 文件名 # 新写法(推荐)
(3)已经commit了,想撤销这次提交
bash
git reset --soft HEAD^ # 撤销提交,改动保留在暂存区(最温和)
git reset --mixed HEAD^ # 撤销提交,改动保留在工作区(默认值)
git reset --hard HEAD^ # 撤销提交,改动全部丢弃(危险!)
其中 HEAD^ 表示上一个版本,HEAD^^ 是上上个,HEAD~5 是往前5个。
(4)回退到指定的某个历史版本
bash
git log --oneline # 先查到目标版本的commit id,如 a1b2c3d
git reset --hard a1b2c3d # 回退到该版本
(5)reset过头了,想再回来
bash
git reflog # 查看所有操作记录,包括被reset掉的提交
git reset --hard 目标commit id
git reflog是后悔药 ,只要没执行git gc,几乎所有误操作都能靠它找回来。这条命令一定要记住。
(6)撤销某次提交,但保留历史记录(已推送到远程时用)
bash
git revert commit_id # 生成一个新提交来抵消指定提交的改动
reset和revert怎么选:
- 提交还没push 到远程 → 用
reset,直接抹掉,历史干净;- 提交已经push 了,别人可能拉过 → 用
revert,用一次新提交去抵消。强行reset后再push -f会把别人的记录搞乱。 (7)临时保存现场(写到一半要切分支救急)
bash
git stash # 把当前工作区改动暂存起来,工作区变干净
git stash save "说明" # 带说明的暂存
git stash list # 查看暂存列表
git stash pop # 恢复最近一次暂存并从列表删除
git stash apply stash@{1} # 恢复指定的暂存,但不从列表删除
git stash drop stash@{0} # 删除指定暂存
git stash clear # 清空所有暂存
5.分支操作
分支是Git的核心优势。开发新功能、修bug都应该开新分支,避免污染主分支。
bash
git branch # 查看本地分支,带*的是当前分支
git branch -a # 查看所有分支(含远程)
git branch -v # 查看分支及最后一次提交
git branch dev # 创建dev分支
git checkout dev # 切换到dev分支
git checkout -b dev # 创建并切换(常用,等于上面两条)
git switch dev # 新写法,切换分支
git switch -c dev # 新写法,创建并切换
git merge dev # 把dev分支合并到当前分支
git branch -d dev # 删除dev分支(未合并的会拒绝删除)
git branch -D dev # 强制删除
git push origin --delete dev # 删除远程dev分支
git branch -m 旧名 新名 # 重命名分支
一个典型的功能开发流程:
bash
git checkout main # 回到主分支
git pull # 拉取最新代码
git checkout -b feature-uart # 开一个功能分支
# ...在这里写代码、多次commit...
git checkout main # 功能完成,回到主分支
git pull # 再拉一次,防止别人有新提交
git merge feature-uart # 合并功能分支
git push # 推送
git branch -d feature-uart # 删除已合并的功能分支
6.远程仓库操作
bash
git remote -v # 查看已关联的远程仓库
git remote add origin git@gitee.com:用户名/仓库名.git # 关联远程仓库
git remote rm origin # 解除关联
git remote set-url origin 新地址 # 修改远程地址
git push -u origin main # 首次推送,-u建立追踪关系,之后直接git push即可
git push # 推送当前分支
git push origin dev # 推送指定分支
git push --tags # 推送所有标签
git fetch # 只拉取远程更新,不自动合并(安全)
git pull # 拉取并合并 = fetch + merge
git pull --rebase # 拉取并变基,历史更线性
本地已有项目关联到远程仓库,完整流程是:
bashgit init git add . git commit -m "初始化提交" git remote add origin git@gitee.com:用户名/仓库名.git git pull --rebase origin master # 远程若有README等文件,先拉下来 git push -u origin master如果
git remote add报错remote origin already exists,先删掉再加:
bashgit remote rm origin git remote add origin git@gitee.com:用户名/仓库名.git
7.标签管理
发版本的时候用,比如给固件打个 v1.0.0:
bash
git tag # 查看所有标签
git tag v1.0.0 # 打轻量标签
git tag -a v1.0.0 -m "第一个正式版" # 打附注标签(推荐,带说明和时间)
git tag -a v1.0.0 a1b2c3d # 给历史某次提交补打标签
git push origin v1.0.0 # 推送单个标签
git push origin --tags # 推送所有标签
git tag -d v1.0.0 # 删除本地标签
git push origin :refs/tags/v1.0.0 # 删除远程标签
8.忽略文件(.gitignore)
编译产生的中间文件、IDE配置、密钥文件等不应该提交到仓库。在项目根目录新建 .gitignore 文件:
bash
# 编译输出
*.o
*.obj
*.hex
*.bin
*.map
*.lst
Objects/
Listings/
build/
Debug/
Release/
# Keil / IAR 用户配置文件
*.uvguix.*
*.uvoptx
*.dep
*.crf
*.d
settings/
# IDE配置
.vscode/
.idea/
# 系统文件
Thumbs.db
.DS_Store
# 敏感信息
*.key
config_local.h
# 例外:即使忽略了*.bin,这个文件也要提交
!bootloader.bin
需要注意的是 :
.gitignore只对还没被跟踪的文件生效 。如果某个文件已经提交过,再加进.gitignore是没用的,需要先把它从版本控制中移除:
bashgit rm --cached 文件名 # 从仓库移除,但保留本地文件 git rm -r --cached 目录名/ # 移除整个目录然后重新commit即可。
9.常用命令速查表
| 命令 | 作用 |
|---|---|
git init |
初始化本地仓库 |
git clone <url> |
克隆远程仓库 |
git status |
查看当前状态 |
git add . |
添加所有改动到暂存区 |
git commit -m "说明" |
提交到本地仓库 |
git push |
推送到远程 |
git pull |
拉取并合并远程更新 |
git fetch |
只拉取,不合并 |
git log --oneline --graph |
图形化查看提交历史 |
git diff |
查看改动内容 |
git branch |
查看分支 |
git checkout -b <name> |
创建并切换分支 |
git merge <name> |
合并分支 |
git reset --hard <id> |
回退版本(危险) |
git revert <id> |
反做某次提交 |
git reflog |
查看所有操作记录(后悔药) |
git stash / git stash pop |
暂存/恢复工作现场 |
git tag -a v1.0 -m "说明" |
打标签 |
git rm --cached <file> |
从版本控制中移除但保留文件 |
三、TortoiseGit的安装与配置
1.关于TortoiseGit
TortoiseGit(小乌龟)是Windows下的Git图形化客户端,它把Git命令封装成了资源管理器右键菜单,并且会在文件图标上叠加状态标记,一眼就能看出哪些文件改动了。
需要注意的是 :TortoiseGit只是一个界面外壳,它本身不包含Git,必须先安装Git(见第一章)才能使用。
2.下载与安装
需要下载两个文件:
- 主程序 :
TortoiseGit-2.x.x.x-64bit.msi - 中文语言包 :
TortoiseGit-LanguagePack-2.x.x.x-64bit-zh_CN.msi(页面下方 Language Packs 区域,找Chinese, simplified)
先安装主程序,一路 Next,其中有一步会让选择SSH客户端:
TortoiseGitPlink(默认) :TortoiseGit自带的PuTTY方案,密钥格式为.ppk,需要额外转换;OpenSSH, Git default SSH Client(推荐) :直接复用第一章配置好的id_rsa密钥,不用做任何转换 。
这一步很关键。如果第一章已经用
ssh-keygen生成过密钥并配好了公钥,这里务必选 OpenSSH,可以直接省掉后面PuTTYgen转换密钥的所有麻烦。若选了默认的TortoiseGitPlink,请看本节第4小节。
其余步骤保持默认,点击 Install 完成安装。
再双击安装中文语言包,一路 Next 即可,主要中文语言包版本号要一致。
3.首次配置
安装完成后会自动弹出配置向导(若没弹出,可在桌面右键 → TortoiseGit → Settings):
(1)设置语言
General 页面的 Language 下拉框选择"中文(简体)",点击"应用"。
(2)配置用户名和邮箱
进入 Git 页面,填写 Name 和 Email。这里实际写入的就是 .gitconfig,和命令行的 git config --global user.name 是一回事,如果第一章已经配过,这里会自动显示,无需重复填写。

(3)确认Git.exe路径
General 页面下方有 Git.exe Path,正常会自动识别到 C:\Program Files\Git\bin。若提示找不到,手动指定到Git安装目录下的 bin 文件夹。
(4)确认SSH客户端
网络(Network) 页面的 SSH客户端 一栏:
- 用OpenSSH方案 → 填
C:\Program Files\Git\usr\bin\ssh.exe - 用PuTTY方案 → 填
C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe
4.(可选)使用PuTTY方案时的密钥转换
如果安装时选了默认的 TortoiseGitPlink,那么它不认识 id_rsa,需要转成 .ppk 格式:
- 开始菜单打开 PuTTYgen(随TortoiseGit一起安装);
- 点击 Load ,文件类型选
All Files (*.*),选择C:\Users\你的用户名\.ssh\id_rsa; - 提示导入成功后,点击 Save private key ,忽略"不设密码"的警告,保存为
id_rsa.ppk; - 打开 Pageant (同样随TortoiseGit安装,运行后在任务栏托盘),右键托盘图标 →
Add Key,加载刚才的.ppk文件。
也可以直接用PuTTYgen新生成一对密钥,把上方文本框里的公钥内容复制到Gitee,私钥保存为 .ppk。
再强调一次:图省事就在安装时选OpenSSH,这一整节都可以跳过。
四、TortoiseGit的详细使用
安装完成后,在任意文件夹空白处右键(Win11需点"显示更多选项"),就能看到TortoiseGit的菜单项。
1.克隆远程仓库
- 在想要存放代码的文件夹里空白处右键 → Git 克隆(Clone);
URL填远程仓库地址(从Gitee复制的SSH地址);目录是本地存放路径,会自动根据仓库名填好;- 如果用PuTTY方案,勾选
加载 Putty 密钥并选择.ppk文件;OpenSSH方案则不用管; - 点击"确定",等待克隆完成。

2.在本地创建仓库
- 新建一个文件夹,进去空白处右键 → 在这里创建版本库(Create repository here);
- 弹窗中的
制作纯版本库不要勾选(勾了就是bare仓库,没有工作区); - 点击"确定",文件夹里会生成
.git隐藏目录。
3.看懂文件图标
TortoiseGit会在文件/文件夹图标左下角叠加小图标表示状态:
| 图标 | 含义 |
|---|---|
| 绿色对勾 ✔ | 已提交,本地与版本库一致,没有改动 |
| 红色感叹号 ❗ | 已修改,尚未提交 |
| 蓝色加号 ➕ | 新添加到暂存区,等待提交 |
| 灰色减号 ➖ | 被删除的文件 |
| 黄色问号 ❓ | 未纳入版本控制(Untracked) |
| 黄色叹号(冲突图标) | 存在冲突,需要手动解决 |
如果图标不显示,一般是图标缓存问题。可以重启资源管理器(任务管理器 → 找到"Windows 资源管理器" → 重新启动),或在
TortoiseGit设置 → 图标覆盖里检查配置。
4.提交代码(add + commit + push)
(1)提交到本地仓库 修改或新增文件后,在项目文件夹空白处右键 → Git 提交(Commit) -> "master":
- 上方"日志信息"框填写本次提交说明;
- 下方文件列表勾选要提交的文件(未跟踪的文件默认不勾,需手动勾上);
- 点击"提交"。
也可以先右键单个文件 →
TortoiseGit→ 添加(Add) ,把文件加入暂存区(相当于git add),再执行提交。不过在提交窗口里直接勾选更方便,一步到位。
(2)推送到远程仓库 提交完成后的窗口里直接有"推送"按钮,点它即可;也可以右键 → TortoiseGit → 推送(Push):
本地分支和远程分支通常保持一致(都是master或main);远端选origin;- 点击"确定"。 推送成功后刷新Gitee仓库页面,就能看到新提交的文件了。
5.更新代码(pull / fetch)
多人协作时,每天开工第一件事就是拉取最新代码 。 右键 → TortoiseGit → 拉取(Pull) → 确定。
如果只想看看远程有什么更新、暂时不合并到本地,用 获取(Fetch) ,对应 git fetch。
习惯:每次开始写代码前先Pull一次,写完提交前再Pull一次,能避免大部分冲突。
6.查看提交日志
右键 → TortoiseGit → 显示日志(Show log)。 日志窗口的信息很全:
- 上半部分是提交列表(时间、作者、提交说明、commit id);
- 左下是本次提交涉及的文件;
- 右下是该文件的具体改动内容;
- 双击某个文件可以打开对比窗口,红绿高亮显示每一行的增删。

7.版本回滚
(1)撤销未提交的修改
右键 → TortoiseGit → 还原(Revert) ,勾选要还原的文件 → 确定。相当于 git checkout -- 文件名。
(2)回退到历史版本
- 右键 →
TortoiseGit→ 显示日志; - 在列表中找到想回到的那个版本,右键该条目 → 重置 "master" 到这个版本(Reset "master" to this);
- 弹窗中有三种模式,对应命令行的三种reset:
- Soft:只移动分支指针,改动保留在暂存区;
- Mixed:移动指针,改动保留在工作区(默认,较常用);
- Hard :彻底丢弃之后的所有改动(危险,操作前确认);
- 选择模式后点击"确定"。 回滚后再去本地文件夹查看,之前提交的文件已经恢复到对应版本的状态了。
万一Hard回滚过头,别慌。用命令行
git reflog找到之前的commit id,再reset回去就行。
8.分支的创建、切换与合并
(1)创建分支 右键 → TortoiseGit → 创建分支(Create Branch):
分支填新分支名,例如dev;基于选择从哪个版本创建,默认是当前HEAD;- 勾选
切换到新分支可以创建后直接切过去; - 确定。

(2)切换分支
右键 → TortoiseGit → 切换/检出(Switch/Checkout),在下拉框中选择目标分支 → 确定。

切换后,文件夹里的文件内容会立刻变成该分支的版本。
(3)合并分支
假设要把 dev 合并到 master:
- 先切换到
master分支; - 右键 →
TortoiseGit→ 合并(Merge); 来源选择分支→dev;- 确定。

合并后如果没有冲突,直接推送即可;有冲突则参考下一节。
9.解决冲突(重点)
冲突产生的原因 :两个人(或同一个人在两台电脑上)修改了同一个文件的同一行 ,Git无法判断该保留谁的,就会报冲突。 (1)复现一下冲突场景 为了演示,可以这样制造一次冲突:
- 把同一个远程仓库克隆到两个不同的本地目录,比如
repoA和repoB; - 在
repoA中修改测试文件01.txt的第一行,提交并推送; - 在
repoB中也修改测试文件01.txt的第一行(内容不同),提交后推送; - 这时
repoB会推送失败,提示rejected non-fast-forward的错误窗口,提示需要先拉取。 (2)拉取后出现冲突 在repoB执行 Pull,会提示合并冲突,冲突文件的图标变成黄色感叹号。 同时目录下会多出几个临时文件:
文件名.BASE.txt:两边共同的祖先版本;文件名.LOCAL.txt:本地版本;文件名.REMOTE.txt:远程版本。 打开冲突文件本身,会看到Git插入的冲突标记:
markdown
<<<<<<< HEAD
这是我本地写的内容
=======
这是别人推送到远程的内容
>>>>>>> a1b2c3d4
(3)解决冲突 不要慌,右键该文件 → TortoiseGit → 编辑冲突(Edit conflicts),会打开TortoiseGitMerge三栏对比窗口:
- 左侧:
Theirs(远程/他人的版本) - 右侧:
Mine(本地/我的版本) - 下方:
Merged(最终合并结果) 在冲突处右键,选择"使用这个文本块"(Use this text block),可以选择用他人的、用自己的,或两者都保留;也可以直接在下方合并结果区手动编辑成想要的样子。 (4)标记为已解决 改完保存,右键文件 →TortoiseGit→ 解决(Resolved / Mark as resolved) ,几个.BASE.LOCAL.REMOTE临时文件会自动清理。 最后正常执行提交、推送即可。
解决冲突的原则:搞不清对方为什么这么改的时候,先去问一下,别自作主张删掉别人的代码。
10.忽略文件
右键需要忽略的文件 → TortoiseGit → 删除并添加到忽略列表(Delete and add to ignore list),可以选择:
- 忽略这个文件:只忽略该文件;
- *忽略 .后缀:忽略所有同类型文件;
- 作用范围可选"在版本库根目录"或"仅在此目录"。 操作后会自动生成/更新
.gitignore文件。
也可以直接手动新建、编辑
.gitignore,写法参考本文第二节第8小节。.gitignore文件本身是需要提交到仓库的,这样团队成员共用一套忽略规则。
11.设置外部比较工具(Beyond Compare)
TortoiseGit自带的TortoiseGitMerge够用,但如果习惯Beyond Compare,可以替换: TortoiseGit设置 → 外部程序 → 差异查看器:
- 选择
外部程序; - 填入(路径按实际安装位置修改): "C:\Program Files\Beyond Compare 4\BCompare.exe" %base %mine
- 同理,
合并工具页面填入: "C:\Program Files\Beyond Compare 4\BCompare.exe" %mine %theirs %base %merged
12.其他常用功能
| 右键菜单项 | 对应命令 | 说明 |
|---|---|---|
| 差异比较(Diff) | git diff |
查看当前文件与上次提交的差异 |
| 版本分支图(Revision graph) | --- | 图形化展示整个分支走向 |
| 贮藏更改(Stash changes) | git stash |
临时保存工作现场 |
| 贮藏列表(Stash list) | git stash list |
查看并恢复贮藏 |
| 创建标签(Create Tag) | git tag |
打版本标签 |
| 清理(Clean up) | git clean |
清除未跟踪的文件 |
| 同步(Sync) | --- | 一个窗口里完成pull/push/fetch |
| 追溯(Blame) | git blame |
查看每一行代码是谁、什么时候写的 |
追溯(Blame) 这个功能在排查问题时很好用,能直接定位到某行代码的提交人和提交时间,找相关同事确认改动原因效率很高。
五、常见问题
(1)推送时报 rejected - non-fast-forward
远程有你本地没有的提交。先 Pull 拉取合并(有冲突就解决冲突),再 Push。不要直接用 push -f 强推,那会覆盖别人的提交。
(2)推送时报 Permission denied (publickey)
SSH配置问题。参考第一章第四节第9小节排查:确认远程地址是SSH格式、公钥已正确添加到平台、ssh -T git@gitee.com 能验证通过。
(3)TortoiseGit图标不显示
- 重启资源管理器;
- 检查
TortoiseGit设置 → 图标覆盖 → 状态缓存,改为默认; - Windows的图标覆盖数量有上限(15个),如果同时装了OneDrive、坚果云等,可能挤占了名额。可在注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers中把不需要的项重命名(前面加zz),让TortoiseGit排到前面。
(4)提交时中文乱码
TortoiseGit设置 → Git → 编辑本地.git/config,添加:
ini
[gui]
encoding = utf-8
[i18n]
commitencoding = utf-8
logoutputencoding = utf-8
(5)克隆速度极慢(GitHub)
-
优先使用Gitee,或用Gitee的"导入仓库"功能中转;
-
配置代理(假设本地代理端口7890):
bashgit config --global http.proxy http://127.0.0.1:7890 git config --global https.proxy http://127.0.0.1:7890 # 取消代理 git config --global --unset http.proxy git config --global --unset https.proxy
(6)误删了分支/提交
命令行执行 git reflog,找到对应的commit id,然后 git reset --hard <id> 或 git branch <分支名> <id> 恢复。
总结
几点个人经验:
git status和git log多敲,不确定状态时先看清楚再操作;reset --hard之前先想三秒 ,实在回滚错了就用git reflog找回来;- 分支不要吝啬,新功能、试验性改动都开新分支,主分支保持随时可用;
- 提交说明认真写,三个月后回来看日志,你会感谢当时的自己;
- 图形界面提效,但命令行必须能看懂,因为出问题时的解决方案基本都是命令行的。
教程中涉及的软件均可从官网下载:Git官网、TortoiseGit官网、阿里镜像(Git)。
参考文章: TortoiseGit-使用教程(图文详细版) Git教程 SSH keys配置 Git详细安装教程 gitee上传代码(生成SSH公钥)