Git和Gitee基本使用教程

一、Git是什么?

Git是一个免费的、开源的"分布式版本控制系统"。

1.1分布式VS集中式

分布式(Git)

每一台克隆代码的电脑,都拥有一份完整仓库(全部历史、所有分支);

本地可以离线提交、建分支、回滚版本,不需要联网;

Git/GitHub远程仓库只是其中一份"备份/交换中心";

所有人本地都有完整数据,容错更高。
集中式(SVN)

只有一台中心服务器保存完整代码;

本地电脑只有当前文件,没有完整历史;

断网无法查看历史、提交版本;服务器崩了所有历史有丢失风险。

1.2版本控制

简单来说,版本控制就是给文件保存无数个历史版本,随时回溯、对比改动。

没有版本控制时,你写代码只能手动复制xxx1.c、xxx2.c......,文件杂乱,分不清改了什么,删错内容无法恢复。

有了版本控制功能:每一次commit就是一份快照;可以查看每一行代码是谁改的、什么时候改的;改错了能一键回退到任意历史版本;多人开发可以区分不同修改,解决代码冲突。

二、Git安装

三、Git基础操作

首先了解工作区、暂存区、远程仓库

工作区:你本地的

.git目录 = 版本库(仓库)

objects:永久保存所有历史版本快照

index:暂存区

refs/heads:保存各个分支指针

1.使用Git上传代码到Gitee全流程

1.1打开Git终端

(1)鼠标右键-->Git Bash Here

(2)找到你要上传的代码文件夹,然后鼠标右键-->Git Bash Here

1.2Git全局设置

先分清两个概念:1.全局(--global):作用在电脑所有Git仓库

2.本地(不加--global):只作用当前这一个项目文件夹

1.最常见的两条全局配置(身份信息)

bash 复制代码
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"

作用:

每次你git commit提交代码时,Git需要记录是谁提交得的。

不设置:提交会报错或者身份空白,Gitee/GitHub无法识别提交者头像。

加--global:一次设置,本机所有项目共用这套名字邮箱。

注意:Gitee/Github尽量用账号绑定的邮箱,不然提交记录不会显示在个人贡献面板。
2.其他常用全局配置举例

如果你的开发环境是Windows,那么你在git commint的时候大概率会显示一个warning

bash 复制代码
warning: CRLF will be replaced by LF in Makefile.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in main.c.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in stack.c.
The file will have its original line endings in your working directory
warning: CRLF will be replaced by LF in stack.h.
The file will have its original line endings in your working directory

这是因为Windows和Linux/Git的换行符不同。 CRLF:Windows换行符\r\n; LF:Linux/Git标准换行符\n。

因此Git 提示:存入仓库时自动把文件里 Windows 换行\r\n转换成 Unix 换行\n; 你本地工作区文件保持原样不变。

C 语言、Makefile 在 Linux 环境编译对换行符很敏感,这条自动转换其实是好事,避免上传后编译报错。

如果是Windows开发环境(标准配置)

检出文件时自动转为 CRLF,入库统一存 LF(默认推荐)

bash 复制代码
git config --global core.autocrlf true

② 如果你只在 Linux/WSL 开发,不需要转换

bash 复制代码
git config --global core.autocrlf input

彻底关闭自动转换(不建议,容易 Makefile 编译异常)

bash 复制代码
git config --global core.autocrlf false

你有 Makefile! 千万不要关闭换行自动转换 ,如果仓库里存了 CRLF,放到 Linux 编译会报奇怪错误: /bin/sh: ^M: command not found 当前 Git 自动转 LF 的行为正好规避这个坑。

默认拉取推送行为

git config --global pull.rebase true

设置默认分支名(新版git init默认main)

git config --global init.defaultBranch main

设置编辑器 git config --global core.editor notepad

配置文件存放在哪里?

Windows:C:\Users\用户名\.gitconfig

Linux/Mac:~/.gitconfig

如何查看项目的配置文件?

git config --list

1.3初始化本地仓库(项目根目录执行)

bash 复制代码
git init

执行git init后,Git自动完成:

1.在当前文件夹新建一个隐藏目录.git,这个.git文件夹就是整个Git仓库本体;没有.git = 普通文件夹,Git不管理任何文件。

Windows注意:.git默认是隐藏文件夹,文件管理器开启「显示隐藏项目」才能看见。

2.在.git内部生成一整套仓库基础结构:

bash 复制代码
.git
├── config        # 当前仓库【本地配置】(优先级高于全局git config)
├── HEAD          # 标记当前处在哪个分支(初始指向 master/main)
├── objects/      # 核心!存放所有文件快照、提交记录(Git对象数据库)
├── refs/         # 存放分支标签指针(master、main都在这里)
├── index         # 暂存区(git add 就是往这个文件写入信息)
└── description   # 仓库描述(Gitee/GitHub基本不用)

1.4将文件加入暂存区

bash 复制代码
#添加单个文件
git add xxx.c

#添加d多个文件
git add xxx.c xxx.h xxxx.c

#添加当前目录下所有新建/修改文件(最常用)
git add .

这一步的作用就是将工作区的文件改动,存入暂存区。暂存区对应.git/index文件。

注意:git add .不会删除已经被你手动删除掉的文件,如果有文件删除,需要git add -u

bash 复制代码
# 取消所有暂存
git reset HEAD .

1.5查看状态

bash 复制代码
# 查看工作区、暂存区当前状态
git status   

# 精简板
git status -s   

典型输出场景

场景一:干净状态(无任何改动)

含义:工作区、暂存区和本地最新提交完全一致,没有可提交内容。
场景二:修改文件,但还没git add(仅工作区改动)

红色,改动只在工作区, commit不会带上这份修改,必须执行git add。
场景三:已经git add,文件在【暂存区】

绿色,代表已经加入暂存区,可以执行git commit。

1.5生成提交快照

bash 复制代码
git commit -m "本次的提交描述,实现/修改什么'

必须先执行git add,把变更放入暂存区。git commit只读取暂存区内容,工作区没add的修改不会被保存!

1.6关联远程仓库(链接复制Gitee仓库地址)

bash 复制代码
git remote add origin https://gitee.com/xxxxxxx/xxxxx.git

1.7推送代码并绑定分支

bash 复制代码
# 首次,绑定分支
git push -u origin master

git push:把本地分支的提交,上传到远程仓库

origin:远程仓库别名(通过git remote add配置的)

master:你本地要推送发分支名

-u = --set-upstream,作用:建立追踪关系(绑定上下游分支)

1.8后续日常修改代码推送

以后改完代码,简化流程:

bash 复制代码
# 1. 将改动加入暂存区
git add .

# 2.生成版本快照(提交到本地仓库)
git commit -m "清晰描述本次修改内容"

#3. 推送到远程仓库
git push

不需要写git push -u origin master,首次-u已经绑定上下游分支,直接git push即可。

拓展小提示

多人协同标准流程

多人同时操作同一个远程仓库,远程代码可能被其他人更新。

如果你本地版本落后,直接git push会被远程拒绝。

完整协作推送流程

bash 复制代码
# 1. 拉取远程最新代码,合并到本地
git pull

# 2. 修改你的代码
# 3. 添加变更到暂存区
git add .

# 4. 本地生成提交
git commit -m "本次修改说明"

# 5. 推送到远程仓库
git push

git pull底层等价于两条命令组合:git fetch(仅仅下载远程所有新提交,不合并)+git merge(把远程改动合并进本地分支)

两种情况:

1.无冲突:pull自动合并完成,直接继续add/commit/push

2.出现代码冲突(CONFLICT):两个人修改了同一文件的同一处代码,Git不知道保留谁的代码。

2.1将Gitee远程仓库克隆到本地全流程

2.1找到仓库地址

打开Gitee仓库主页,复制HTTPS地址。示例:https://gitee.com/xxxxxxx/xxxxx.git

2.2打开Git Bash Here,切换到你想要存放项目的目录

bash 复制代码
cd D:\code

2.3执行克隆命令

bash 复制代码
git clone https://gitee.com/xxxxxxx/xxxxx.git

不想仓库名叫Gitee/GitHub上的名字,可以后面加上文件夹名:

bash 复制代码
git clone https://gitee.com/xxxxxxx/xxxxx.git my_code

如果只克隆单个分支(不用下载全部分支)

bash 复制代码
git clone -b master https://gitee.com/xxxxxxx/xxxxx.git

执行后Git自动完成一系列操作:

1.在当前目录新建文件夹

2.git init初始化本地仓库

3.git remote add origin 仓库地址 自动关联远程

4.下载远程所有代码、所有提交记录、分支

5.自动检出默认分支代码到工作区

如果克隆提示权限失败

HTTPS方式:第一次推送代码时,需要输入Gitee账号+私人令牌。

SSH方式:需要提前配置公钥

2.4克隆完成后,后续日常开发流程(和前面一致)

修改代码之后上传流程:

bash 复制代码
# 多人协作优先拉取
git pull
# 修改代码
git add .
git commit -m "功能修改描述"
git push

常见问题

1.克隆需要账号密码?

2.克隆只会下载默认分支吗?

会下载仓库所有分支完整历史,可以切换其他分支。

相关推荐
雨翼轻尘2 小时前
01_Git概述及基本操作
git·概述·基本操作
程序员果子4 小时前
CrewAI :当 Agent 学会团队协作
人工智能·git·python·多智能体·agent框架
‎ദ്ദിᵔ.˛.ᵔ₎5 小时前
Git GDB/CGDB调试器
git·gdb
他们都叫我GPT侠7 小时前
【无标题】
git·github
果汁华7 小时前
CLI 命令行与 Python 框架实战
git·python·github
zzzzzz3108 小时前
我用 AI Agent 重构了日常开发工作流,效果出乎意料
人工智能·git·github
我叫黑大帅21 小时前
git 的 NFD 与 NFC 有什么区别?为什么我有个文件在 NFC 中间不会被当成改动,在 NFD 中就会当成改动
git·面试·github
呆萌很1 天前
Git push 408 超时、远程断开解决办法
git
Lesile1 天前
Hands-on Git experience
git