版本控制器Git
Git 是一个 分布式版本控制系统,简单来说,就是一个能「记录代码每一次修改、回溯历史、多人协作开发」的工具。
举个生活化的例子:你写一篇博客,第一次写了初稿,后来修改了几个段落(第二版),觉得不满意,又改回了初稿的部分内容(第三版)。如果没有备份,你很可能会弄丢某一版的内容,也记不清自己到底改了什么。
而Git就相当于一个"智能备份+历史记录本",它会记录你对代码(或文件)的每一次修改:谁改的、改了什么、什么时候改的,哪怕你改乱了、删错了,也能一键回溯到之前的任意一个版本,再也不用怕"改崩了回不去"。
这里要注意两个关键:
-
「分布式」:每个人的电脑上都有完整的代码版本库,不用依赖中央服务器(比如GitHub),就算断网,也能正常修改、提交代码,联网后再同步即可。
-
「版本控制」:核心就是"管理版本",把每一次修改都当成一个"版本快照",随时可以切换、对比、恢复。
Git的强大之处
Git 比普通版本管理工具强在哪里?它像一个「全能游戏存档系统」,但能力远超游戏存档:
-
**可以随时 "读档"**不管代码改得多乱,只要之前存过档(commit),就能一键回到任意历史版本,再也不怕写崩了回不去。
-
**可以开 "平行宇宙"(分支)**想尝试新功能、改 bug、做实验?直接开个新分支随便造,玩坏了删掉就行,完全不影响主线稳定版本。
-
**可以多人 "联机存档"**队友写的代码、你写的代码,Git 能自动合并进度;就算两人改了同一处,也会提示冲突,让你们一起决定最终版本。
-
可以离线存档,联网再同步断网也能提交、建分支、看历史,联网后再同步给队友,不受网络限制。
-
存档轻量又快每次提交只存改动部分,不重复存完整文件,哪怕大项目也秒级响应,不占空间。
Git 与 Gitee / GitHub 关系
-
Git 是工具 Git 是本地版本控制软件,装在自己电脑上,负责:写代码、记录版本、建分支、本地提交、回退代码。
-
pullGitHub / Gitee 是远程平台 是云端代码仓库网站,用来存放远程代码仓库。
-
三者关系
- Git:干活的工具(本地)
- GitHub/Gitee:存代码的云端仓库(远程)
- 你用 Git 把本地代码推送(push) 到 Gitee/GitHub,也可以从平台**拉取(pull)**代码到本地。
4.大白话总结
✅ Git = 工具
✅ Gitee/GitHub = 云端仓库服务器
没有Git 不能上传代码;
没有 Gitee/GitHub 只能自己本地用,无法云端备份、多人协作。
安装Git及提交
bash
yum install git
一、必须先建本地目录(文件夹)
必须自己先建好本地文件夹,再进入这个文件夹,才能执行初始化!
流程顺序是:
- 新建文件夹(自己建)
- 进入文件夹
- 初始化 Git 仓库
二、初始化本地仓库是什么意思?
git init 的作用:让当前这个文件夹,变成 Git 能管理的仓库。
不执行 git init,Git 不认识这个文件夹!
三、正确完整步骤(你照着做永远不会错)
1. 先建一个项目文件夹
bash
mkdir myproject
2. 进入这个文件夹(关键!)
bash
cd myproject
3. 初始化 Git 仓库(让它变成 Git 项目)
bash
git init
4. 把代码放进来
比如你放 .c文件、``.h文件 等
5. 后续提交
bash
git add .#添加当前文件夹的所有文件
git commit -m "第一次提交/改动信息"
四、一句话总结
先建文件夹 → 进入文件夹 → 再 git init
不能在外面初始化! 不能没有文件夹就初始化!
三板斧理解
1.git add
将代码放到刚才下载好的⽬录中
bash
git add [⽂件名]
将需要⽤git管理的⽂件告知git
2. git commit
提交改动到本地
bash
git commit -m "改动内容"
最后的"."表⽰当前⽬录
提交的时候应该注明提交⽇志,描述改动的详细内容
3. git push
同步到远端服务器上
bash
git push
需要填⼊⽤⼾名密码
同步成功后,刷新Github/Gitee⻚⾯就能看到代码改动了
配置免密码提交 :git本地免密码和账号pull、push_没有git账号怎么拉代码-CSDN博客
平常使用就这4步:
- git add 放到暂存区
- git commit 本地保存
- git push 上传云端
- git pull 下载云端
GIt常用指令
| 操作功能 | 命令 | 作用说明 |
|---|---|---|
| 初始化本地仓库 | git init |
把当前文件夹变成 Git 仓库 |
| 查看状态 | git status |
查看文件修改、暂存情况 |
| 添加到暂存区 | git add 文件名 / git add . |
把修改的文件加入暂存区 |
| 提交到本地仓库 | git commit -m "备注" |
保存版本,生成快照 |
| 查看提交日志 | git log |
查看所有提交记录 |
| 绑定远程仓库 | git remote add 别名 仓库地址 |
本地关联 Gitee/GitHub |
| 拉取远程代码 | git pull |
下载更新远程最新代码 |
| 推送本地代码 | git push |
上传本地代码到远程仓库 |
| 克隆远程项目 | git clone 仓库地址 |
下载别人完整项目到本地 |
| 新建分支 | git branch 分支名 |
创建新分支 |
| 切换分支 | git checkout 分支名 |
切换到指定分支 |
| 合并分支 | git merge 分支名 |
把其他分支合并到当前分支 |
| 撤销暂存 | git reset HEAD 文件名 |
撤回 add 操作,不删除修改 |
| 临时保存修改 | git stash |
临时存放未提交代码 |
| 恢复临时修改 | git stash pop |
恢复暂存的临时代码 |
调试器-gdb/cgdb使⽤
GDB 是什么?
GDB = GNU Debugger Linux 下最常用的命令行调试工具,用来:
- 找程序崩溃原因
- 单步执行代码
- 查看变量值
- 定位逻辑错误
- 断点调试
CGDB 是 GDB 的升级版 ,带代码高亮、分屏显示,更好用、更直观。因此,下面我就用CGDB讲解。
CGDB安装:
bash
sudo yum install -y cgdb
先准备一份测代码:
cpp
#include <stdio.h>
int Sum(int s, int e)
{
int result = 0;
for (int i = s; i <= e; i++)
{
result += i;
}
return result;
}
int main()
{
int start = 1;
int end = 100;
printf("I will begin\n");
int n = Sum(start, end);
printf("running done, result is: [%d-%d]=%d\n", start, end, n);
return 0;
}
在Linux中,gcc/g++编译方式默认是在release模式下进行编译,而cgdb只能编译debug版本的可执行程序,因此我们得在编译时加入-g选项,切换到debug模式:
bash
gcc -g test.c -o test
然后启动cgdb进行调试即可:
bash
cgdb ./test
我们就用上面代码进行调试:
进入cgdb:


打断点
在命令行输入b [要打断点的行数/函数名]

结果:

查看断点信息:i b 来查看所有的断点信息

删除断点:输入d [断点编号]就能删除对应断点
cgdb在不退出的情况下,删除断点其余断点序号不变,增加断点时,断点序号递增:

打了断点之后就是执行程序进行调试
输入r,程序会从main函数开始,自动在第一个断点处停下来。如果你没有打断点,那么运行后会直接结束程序

上面已经跳到第一个断点,如果后面还有断点,输入c 就会跳到下一个断点处
逐过程,逐语句
在vs里逐过程为F10,逐语句为F11
cgdb里,逐过程为n(一次跳过一个函数),逐语句为s(一次跳过一行代码)。
CGDB / GDB 常用指令对照表
| 简写 | 完整命令 | 功能说明 |
|---|---|---|
l |
list |
查看源代码,上下翻代码 |
l 行号 |
list 行号 |
查看指定行附近代码 |
b 行号 |
break 行号 |
在指定行打断点 |
b 函数名 |
break 函数名 |
在函数开头打断点 |
info b |
info breakpoints |
查看所有断点 |
d 编号 |
delete 编号 |
删除指定断点 |
r |
run |
从头运行程序,停在断点 |
n |
next |
逐行执行,不进入自定义函数 |
s |
step |
逐行执行,进入自定义函数内部 |
c |
continue |
继续运行,跳到下一个断点 |
finish |
finish |
直接跳出当前函数 |
p 变量 |
print 变量 |
打印 / 查看变量值、数组、指针 |
p &变量 |
print &变量 |
查看变量内存地址 |
display 变量 |
display 变量 |
每次单步自动打印变量 |
undisplay |
undisplay |
取消自动打印 |
ptype 变量 |
ptype 变量 |
查看变量类型 |
ctrl + c |
--- | 强制暂停卡死 / 死循环程序 |
set args |
set args 参数 |
给程序设置命令行参数 |
q |
quit |
退出 CGDB / GDB |
补充 CGDB 专属快捷键(好用)
- 上方代码区:方向键、PgUp/PgDown 滚动代码
- 按
Esc切到代码区;按i切回底部命令区 - 断点行会标红,直观好找
监视变量
watch
执⾏时监视⼀个表达式(如变量)的值。如果监视的表达式在程序运⾏期间的值发⽣变化,GDB会暂 停程序的执⾏,并通知使⽤者。
删除监视跟删断点操作一样。

如果你有⼀些变量不应该修改,但是你怀疑它修改导致了问题,你可以watch它,如 果变化了,就会通知你.
display
每次停下都自动显示该变量
display 变量

set var
在调试中修改变量的值
set var 变量=值
