引言
不知道你⼯作或学习时,有没有遇到这样的情况:我们在编写各种⽂档时,为了防止文档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出⼀个副本,比如:
"报告-v1"
"报告-v2"
"报告-v3"
"报告-确定版"
"报告-最终版"
"报告-究极进化版"
...
每个版本有各自的内容,但最终会只有⼀份报告需要被我们使用 。
但在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的⽂件就越来越
多,文件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各自都是修改了什么
吗?
文档如此,我们写的项目代码,也是存在这个问题的!!

1.git
1.1git是什么
为了能够更方便我们管理这些不同版本的⽂件,便有了版本控制器。所谓的版本控制器,就是能让你了解到⼀个文件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和 版本迭代的⼀个管理系统,同时也方便多⼈协同作业。 目前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、 dgn、rvt等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项目中的源代码文件

1.2git安装
bash
yum install git
1.3如何在git中下载项目到本地
首先需要在git中复制项目的链接,然后在xshell中创建好一个放置代码的目录,其中url就是我们复制的链接;
git clone---获取远端仓库
bash
git clone [url]
1.4如何查看仓库状态
bash
git status
M README.md # 已修改但未暂存
M index.html # 已修改并已暂存
A newfile.txt # 新增文件(已暂存)
?? untracked.c # 未跟踪文件
D deleted.txt # 已删除
1.5 如何忽略掉不想本地托管上传的文件
bash
.gitignore
① 在项目根目录创建
bash
touch .gitignore
② 或用编辑器创建
bash
vim .gitignore
③基本语法规则
注释以 # 开头
忽略所有 .log 文件 *.log
bash
secret.txt
config.ini
忽略目录(结尾加 /)
bash
node_modules/
build/
dist/
不忽略某个特定文件(用 !)
bash
!important.log # 除了 important.log
忽略模式匹配
bash
temp-*.txt # 忽略所有 temp- 开头的 .txt 文件
*.py[cod] # 忽略 .pyc, .pyo, .pyd 文件
1.6如何查看项目的提交历史记录
bash
git log
显示谁 、在什么时候 、为什么(提交信息)修改了代码。

bash
# 查看最近5次提交
git log -5 --oneline
# 查看今天的提交
git log --since="today" --oneline
# 查看本周的提交
git log --since="1 week ago"
1.7git pull
(1) git pull 是 从远程仓库拉取最新代码并合并到本地 的命令。
git pull = git fetch + git merge 拉取更新 下载远程代码 合并到本地
(2)基本语法
bash
git pull [远程名] [分支名]
(3)多人协作场景
bash
# 你开始工作前
git pull origin main # 1. 拉取最新代码
# 你编写代码...
vim file.c
git add file.c
git commit -m "添加新功能"
# 提交前再次拉取(防止冲突)
git pull origin main # 2. 拉取别人提交的代码
# 如果有冲突,解决冲突
# git add 解决后的文件
# git commit
# 推送你的代码
git push origin main
1.8三板斧

1.8.1 git add
将代码放置在刚才下载好的目录里,将需要用git管理的文件告诉git;
bash
git add [⽂件名]
1.8.2 git commit
Git 提交命令,将暂存区的更改保存到本地仓库。
bash
git commit -m "提交说明"
1.8.3 git push
同步到远端服务器上
bash
git push
需要填⼊用户名密码. 同步成功后, 刷新 Github ⻚⾯就能看到代码改动了。
总体来说,
bash
# 1. 修改文件
vim file.c
# 2. 添加到暂存区
git add file.c
# 3. 提交到本地仓库(就是你现在问的)
git commit -m "修复bug:优化了文件读取逻辑"
# 4. 推送到远程仓库(可选)
git push