Git 的使用

Git 的使用
小米里的大麦Git 的使用
1. Git 版本迭代
1. 查看 Git 版本
1 | git --version # 查看当前安装的 Git 版本号 |
2. Windows 系统更新 Git
- 访问 Git for Windows,下载最新版安装程序。
- 运行安装程序,如果存在旧版本会直接覆盖升级成新版本。
- 安装完成后,再次执行
git --version
验证。
2. Git 仓库的基本使用
1. 新建仓库
- 去 GitHub/Gitee 网页端,点击新建仓库,填写仓库名、介绍等信息。
- 可选择开源或私有,是否初始化 README、License、
.gitignore
等,按需配置。
2. 初始化 Git 仓库(本地仓库)
1 | git init # 在本地初始化一个空仓库(会生成隐藏的 .git 文件夹) |
3. 关联远程仓库
添加 GitHub 或者 Gitee 仓库作为远程地址(默认命名为 origin
):
1 | git remote add origin 仓库链接 # 把远程仓库链接绑到本地,默认叫 origin |
4. 添加文件到暂存区
要让 Git 记录文件的改动( 要提交的文件或者修改后的文件),得先加到暂存区,可以通过以下命令进行:
添加单个文件:
1
2git add 文件名称
# 例如:git add helloWord.cpp添加多个文件(空格分隔):
1
2git add 文件1 文件2 # 加多个文件,空格分开
# 例如:git add file1.txt file2.txt添加所有文件:
1
git add . # 使用 . 可以一次性将所有已修改的文件添加到暂存区。
提交某个目录下的所有文件:
1
2git add 文件夹/ # 加某个文件夹里的所有文件
git add subfolder/ # subfolder 是子文件夹
5. 提交更改
提交暂存区的改动,并为这次提交写一条描述信息(写清楚改了啥)。每次提交都会生成一个唯一的提交 ID(hash),并记录下本次提交的描述信息。
1 | git commit -m "这里写说明,比如:修复登录按钮bug" # 你本次提交的说明信息 |
6. 推送到远程仓库
推送代码到远程分支(如 main
或 master
):
1 | git push -u origin main # 推到远程的 main 分支(首次推送需加 -u,-u 是绑定分支,下次不用写) |
后续推送只需:
1 | git push |
3. 配置问题
1. 让 Git 正确显示中文文件名(支持 UTF-8 )
Windows Git 默认可能会的不正确显示中文,比如把中文文件名显示成 \345\210\233\……
(一堆数字),运行:
1 | git config --global core.quotePath false # 让 Git 正确显示 UTF-8 文件名 |
2. 创建新仓库时设置默认分支
1 | git config --global init.defaultBranch main # 全局设置默认分支为 main |
验证是否设置成功:
方法 1:直接查看全局配置(最直接)
1
git config --global --get init.defaultBranch # 查看全局配置中默认分支的具体值,输出 main 则成功
方法 2:查看完整全局配置文件(适合确认配置是否存在)
Windows 系统:
打开文件管理器,在地址栏输入
%USERPROFILE%
并回车(快速进入用户目录,比如C:\Users\你的用户名
);找到并打开
.gitconfig
文件(文本文件,可用记事本/VS Code 打开);查看文件内容,是否有以下内容:
1
2[init]
defaultBranch = main
Mac/Linux 系统:
打开终端,执行命令查看配置文件:
1
cat ~/.gitconfig
查看输出内容,是否包含上述
[init]
段落。
方法 3:新建仓库测试(最能验证实际效果):
git init
初始化一个仓库并git branch
查看当前分支。
3. 将现有仓库从 master 切换到 main
1 | git branch -m master main # 本地改名为 main |
4. .gitignore
—— 忽略不想提交的文件
.gitignore
文件的作用是:只要在 .gitignore
文件中存在的文件都选择忽略,即将文件写入 .gitignore
就不会让 Git 管。
1. 基本规则
符号 | 意思 | 例子 |
---|---|---|
# |
注释 | # 这行是注释 |
* |
匹配多个字符 | *.log 忽略所有.log 文件 |
? |
匹配单个字符 | file?.txt 匹配 file1.txt |
/ |
只忽略根目录下的文件 / 夹 | /build/ 只忽略根目录的 build |
! |
不忽略这个文件 | !important.log 保留这个文件 |
2. 已上传的文件想忽略
如果文件已经被 Git 跟踪了,.gitignore 没用,得先移除跟踪:
1 | git rm --cached 文件名 # 移除单个文件的跟踪(本地文件保留) |
5. 常用场景命令
场景 | 命令示例 |
---|---|
提交并推送 | git add . → git commit -m "xxx" → git push |
新分支开发 | git checkout -b 分支名 → 改代码 → git add . → git commit -m "说明" → git push origin 分支名 |
撤销暂存区文件 | git reset 文件名 |
撤销最近一次提交 | git reset --soft HEAD^ |
撤销已推送的提交 | git revert 提交ID |
强制推送(慎用) | git push origin 分支名 --force |
6. .git
目录清理与性能优化指南
1. .git
目录的结构与作用
1 | 核心文件/目录: |
2. 常用清理命令
命令 | 作用 | 风险 |
---|---|---|
git gc --prune=now |
清理无用文件/松散对象 | 低 |
git repack -ad |
重新打包文件,减少碎片 | 中 |
git clean -dfx |
删除没有跟踪的文件 / 夹(慎用!) | 高 |
7. 绿点计算规则
统计依据:提交次数而非提交文件数。
有效条件:
- 绑定的邮箱需与账号一致。
- 提交需合并到默认分支(如
main
)。
导入仓库不算贡献,除非产生新提交。
为何一次提交多个文件只算 1 个绿点?
提交次数决定绿点:无论一次提交包含多少文件修改,均视为 1 次提交。例如:
- 修改 10 个文件后执行
git commit -m "update"
→ 计为 1 次贡献。 - 分 3 次提交(每次修改不同文件)→ 计为 3 次贡献。
导入仓库是否算绿点?
- GitHub/Gitee 导入功能:直接通过平台的「导入仓库」功能迁移代码(如 GitHub 导入到 Gitee),不会生成绿点,因为无新提交记录。
- 手动克隆后提交:若导入后手动提交新代码(如修复冲突或更新内容),会计入绿点。
但实际就我测试来看,将 Gitee 仓库导入 GitHub 会计算绿点,但是 GitHub 仓库导入 Gitee 却不会计算绿点。
8. 选择合适的许可证
首先,你需要确定适合你项目的许可证类型。GitHub 提供了一个 许可证选择器,可以帮助你根据项目的需求和目标选择合适的许可证。常见的许可证包括 MIT、Apache 2.0、GPL 等。
1. 添加许可证文件
方法一:使用 GitHub 网页界面
- 访问仓库:在 GitHub 上打开你的仓库页面。
- 创建新文件:点击页面上的 “Add file” 按钮,然后选择 “Create new file”。
- 命名许可证文件:在文件名输入框中,输入
LICENSE.md
。 - 选择许可证模板:在文件编辑区域,GitHub 会提示你选择一个许可证模板。点击 “Choose a license template” 链接,然后从可用的许可证列表中选择你之前确定的许可证类型。
- 提交许可证文件:选择许可证后,GitHub 会自动填充许可证内容。你可以根据需要进行任何修改,然后滚动到页面底部,填写提交信息(如 “Add MIT License”),并点击 “Commit new file” 按钮提交许可证文件。
方法二:使用本地 Git 命令行
克隆仓库:如果你还没有在本地克隆仓库,请先执行以下命令:
1
git clone 仓库链接
创建许可证文件:在本地仓库的根目录下,创建一个名为
LICENSE.md
的文件。编辑许可证内容:使用文本编辑器打开许可证文件,并将你选择的许可证文本粘贴进去。你可以从 许可证选择器 网站复制许可证文本。
提交并推送:使用 Git 提交许可证文件,并将其推送到 GitHub 仓库。
1
2
3git add LICENSE.md
git commit -m "Add MIT License"
git push origin main
2. 验证许可证添加成功
添加许可证文件后,你可以在仓库页面的 “Code” 选项卡下看到新的 LICENSE
文件。此外,GitHub 会在仓库页面的右上角显示许可证类型,并提供一个链接,方便访问者查看完整的许可证内容。
3. 示例:添加 MIT 许可证
以下是 MIT 许可证的示例内容,你可以将其复制到你的 LICENSE
文件中:
1 | MIT License |
请将 [year]
和 [fullname]
替换为实际的年份和你的全名。通过以上步骤,你可以为你的 GitHub 仓库添加适当的许可证,明确项目的法律条款和使用条件。
9. Git LFS(大文件存储)
1. 什么是 Git LFS
Git LFS (Large File Storage) 是 Git 的一个扩展,用于高效管理大文件(如图片、视频、数据集等)。它将大文件存储在远程服务器上,而 Git 仓库中只保留指向这些文件的指针,如果你的项目里有 很大的文件,用普通 Git 会很慢,仓库也会变得巨大。这时就用 Git LFS。
2. 安装 Git LFS
Windows:
- 通过 Git for Windows 安装(推荐):下载最新版 Git for Windows,安装时勾选 “Git LFS” 选项;
- 或单独安装:下载 Git LFS 安装程序
3. 基本使用流程
1 | git lfs install # 初始化 LFS(在仓库里跑一次) |
4. 常见问题解决
已提交的大文件如何迁移到 LFS?
1
2
3git lfs migrate import --include="*.psd,*.zip" --everything # 迁移已提交的大文件
git push origin --force --all # 强制推送改动(谨慎!)
git push origin --force --tags查看 LFS 文件状态
1
git lfs ls-files # 查看所有 LFS 跟踪的文件
LFS 存储空间限制
- GitHub 免费用户:每月 500MB(存储 + 带宽合计),但公开仓库的下载带宽免费。
- GitLab 免费用户:每个项目 10GB 存储空间。
- 超出后,他人无法下载 LFS 文件,需清理或升级解决。
10. GitHub 语言统计不准确问题及解决方案
1. 为什么 GitHub 语言统计不准确?
GitHub 使用 linguist 库 分析仓库语言构成,但有时会出现:
- 误判第三方库为项目主要语言
- 忽略特定语言文件
- 无法识别自定义文件扩展名
2. 使用.gitattributes 调整语言统计
在仓库 根目录 创建或修改 .gitattributes
文件,写入规则调整统计示例:
1 | # 忽略所有 Markdown 文档文件,不计入语言统计 |
3. 验证.gitattributes 是否生效
- 提交并推送
.gitattributes
文件 - 等待几分钟/几小时让 GitHub 重新计算
- 查看仓库语言统计是否更新
11. 分支管理
1. 基础操作
操作 | 命令 | 说明 |
---|---|---|
看本地分支 | git branch |
带 * 的是当前分支 |
看远程分支 | git branch -r |
远程分支带 remotes/ 前缀 |
新建分支 | git branch 分支名 |
基于当前分支新建 |
新建并切换到分支 | git checkout -b 分支名 |
一步到位 |
切换分支 | git checkout 分支名 或 git switch 分支名 |
换分支 |
删除本地分支 | git branch -d 分支名 |
分支合并后才能删 |
强制删本地分支 | git branch -D 分支名 |
没合并也能删 |
删除远程分支 | git push origin --delete 分支名 |
删了就找不回了,谨慎! |
2. 合并分支与解决冲突
合并分支:
1
2git checkout 目标分支 # 比如要合并到 main,先切到 main
git merge 要合并的分支 # 比如 git merge feature/login冲突解决:
- 冲突文件里会有
<<<<<<< HEAD
、=======
、>>>>>>> 分支名
标记。 - 打开文件,手动删掉标记,保留需要的内容。
- 标记解决:
git add 冲突文件
。 - 完成合并:
git commit -m "解决冲突"
。
- 冲突文件里会有
12. 标签管理(标记版本,比如 v1.0)
操作 | 命令 | 说明 |
---|---|---|
看所有标签 | git tag |
按字母排序 |
建轻量标签 | git tag v1.0 |
只记版本号 |
建带说明的标签(推荐) | git tag -a v1.0 -m "第一个正式版" |
带创建人、时间和说明 |
推单个标签到远程 | git push origin v1.0 |
标签不会自动推,得手动 |
推所有标签到远程 | git push origin --tags |
一次性推所有标签 |
删除本地标签 | git tag -d v1.0 |
删本地的 |
删除远程标签 | git push origin --delete v1.0 |
先删本地再删远程 |
13. 拉取远程代码
命令 | 说明 |
---|---|
git fetch |
拉远程最新代码到本地,不合并 |
git pull |
拉远程代码并自动合并到当前分支 |
git pull origin 远程分支名 |
拉指定远程分支到本地当前分支 |
示例:同步远程 main 到本地:
1 | git checkout main # 切到本地 main |
14. 暂存工作区(stash,临时存改动)
命令 | 说明 |
---|---|
git stash |
暂存当前所有未提交的改动 |
git stash save "说明" |
暂存时加个描述,方便区分 |
git stash list |
看所有暂存记录,格式:stash@{n}: 描述 |
git stash apply stash@{n} |
恢复第 n 个暂存(n 是序号,默认最近的) |
git stash pop |
恢复最近的暂存,并删掉这条记录 |
git stash drop stash@{n} |
删掉第 n 个暂存 |
git stash clear |
清空所有暂存 |
15. 查看提交历史(log)
命令 | 说明 |
---|---|
git log |
看完整历史(按时间倒序) |
git log --oneline |
简洁显示:一行一个提交(哈希前 7 位 + 说明) |
git log --graph |
图形化显示分支合并历史 |
git log 文件名 |
只看这个文件的修改历史 |
16. 协作开发(Pull Request 流程)
- 先在 GitHub 上 “Fork” 目标仓库,复制到自己账号下。
- 克隆到本地:
git clone 自己的仓库链接
。 - 新建分支开发:
git checkout -b feature/新功能
。 - 改完后提交推送:
git add .
→git commit -m "说明"
→git push origin feature/新功能
。 - 在自己仓库页面点 “Compare & pull request”,发起 PR。
- 等审核,按反馈改(改完直接 push,PR 会自动更新)。
- 审核过了,对方合并到主分支。