Git 的使用

Git 的使用

1. Git 版本迭代

1. 查看 Git 版本

1
git --version   # 查看当前安装的 Git 版本号

2. Windows 系统更新 Git

  1. 访问 Git for Windows,下载最新版安装程序。
  2. 运行安装程序,如果存在旧版本会直接覆盖升级成新版本。
  3. 安装完成后,再次执行 git --version 验证。

2. Git 仓库的基本使用

1. 新建仓库

  1. 去 GitHub/Gitee 网页端,点击新建仓库,填写仓库名、介绍等信息。
  2. 可选择开源或私有,是否初始化 README、License、.gitignore 等,按需配置。

2. 初始化 Git 仓库(本地仓库)

1
git init   # 在本地初始化一个空仓库(会生成隐藏的 .git 文件夹)

3. 关联远程仓库

添加 GitHub 或者 Gitee 仓库作为远程地址(默认命名为 origin):

1
2
git remote add origin 仓库链接   # 把远程仓库链接绑到本地,默认叫 origin
git remote -v # 查看远程仓库信息,验证是否添加成功,确认绑对了

4. 添加文件到暂存区

要让 Git 记录文件的改动( 要提交的文件或者修改后的文件),得先加到暂存区,可以通过以下命令进行:

  • 添加单个文件:

    1
    2
    git add 文件名称
    # 例如:git add helloWord.cpp
  • 添加多个文件(空格分隔):

    1
    2
    git add 文件1 文件2  # 加多个文件,空格分开
    # 例如:git add file1.txt file2.txt
  • 添加所有文件:

    1
    git add .		# 使用 . 可以一次性将所有已修改的文件添加到暂存区。
  • 提交某个目录下的所有文件:

    1
    2
    git add 文件夹/  # 加某个文件夹里的所有文件
    git add subfolder/ # subfolder 是子文件夹

5. 提交更改

提交暂存区的改动,并为这次提交写一条描述信息(写清楚改了啥)。每次提交都会生成一个唯一的提交 ID(hash),并记录下本次提交的描述信息。

1
git commit -m "这里写说明,比如:修复登录按钮bug"		# 你本次提交的说明信息

6. 推送到远程仓库

推送代码到远程分支(如 mainmaster):

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
2
git config --global init.defaultBranch main  # 全局设置默认分支为 main
git init # 新建仓库时就会用 main 分支

验证是否设置成功:

  1. 方法 1:直接查看全局配置(最直接)

    1
    git config --global --get init.defaultBranch		# 查看全局配置中默认分支的具体值,输出 main 则成功
  2. 方法 2:查看完整全局配置文件(适合确认配置是否存在)

    • Windows 系统:

      1. 打开文件管理器,在地址栏输入 %USERPROFILE% 并回车(快速进入用户目录,比如 C:\Users\你的用户名);

      2. 找到并打开 .gitconfig 文件(文本文件,可用记事本/VS Code 打开);

      3. 查看文件内容,是否有以下内容:

        1
        2
        [init]
        defaultBranch = main
    • Mac/Linux 系统:

      1. 打开终端,执行命令查看配置文件:

        1
        cat ~/.gitconfig
      2. 查看输出内容,是否包含上述 [init] 段落。

  3. 方法 3:新建仓库测试(最能验证实际效果):git init 初始化一个仓库并 git branch 查看当前分支。

3. 将现有仓库从 master 切换到 main

1
2
3
4
git branch -m master main  # 本地改名为 main
git push -u origin main # 推到远程
git push origin --delete master # 删除远程的 master(谨慎!)
# 最后去 GitHub/Gitee 网页端,把默认分支设为 main

4. .gitignore —— 忽略不想提交的文件

.gitignore 文件的作用是:只要在 .gitignore 文件中存在的文件都选择忽略,即将文件写入 .gitignore 就不会让 Git 管。

1. 基本规则

符号 意思 例子
# 注释 # 这行是注释
* 匹配多个字符 *.log 忽略所有.log 文件
? 匹配单个字符 file?.txt 匹配 file1.txt
/ 只忽略根目录下的文件 / 夹 /build/ 只忽略根目录的 build
! 不忽略这个文件 !important.log 保留这个文件

2. 已上传的文件想忽略

如果文件已经被 Git 跟踪了,.gitignore 没用,得先移除跟踪:

1
2
3
git rm --cached 文件名  # 移除单个文件的跟踪(本地文件保留)
git rm -r --cached 文件夹/ # 移除整个文件夹的跟踪
git commit -m "不再跟踪这个文件/夹" # 提交这个改动

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
3
4
5
6
7
核心文件/目录:
├── objects/ # 存储所有 Git 对象(提交、文件快照等)
├── refs/ # 存储分支、标签指针
├── HEAD # 当前分支指向
├── config # 仓库专属配置
├── index # 暂存区信息
└── hooks/ # Git 操作触发的脚本

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 网页界面

  1. 访问仓库:在 GitHub 上打开你的仓库页面。
  2. 创建新文件:点击页面上的 “Add file” 按钮,然后选择 “Create new file”。
  3. 命名许可证文件:在文件名输入框中,输入 LICENSE.md
  4. 选择许可证模板:在文件编辑区域,GitHub 会提示你选择一个许可证模板。点击 “Choose a license template” 链接,然后从可用的许可证列表中选择你之前确定的许可证类型。
  5. 提交许可证文件:选择许可证后,GitHub 会自动填充许可证内容。你可以根据需要进行任何修改,然后滚动到页面底部,填写提交信息(如 “Add MIT License”),并点击 “Commit new file” 按钮提交许可证文件。

方法二:使用本地 Git 命令行

  1. 克隆仓库:如果你还没有在本地克隆仓库,请先执行以下命令:

    1
    git clone 仓库链接
  2. 创建许可证文件:在本地仓库的根目录下,创建一个名为 LICENSE.md 的文件。

  3. 编辑许可证内容:使用文本编辑器打开许可证文件,并将你选择的许可证文本粘贴进去。你可以从 许可证选择器 网站复制许可证文本。

  4. 提交并推送:使用 Git 提交许可证文件,并将其推送到 GitHub 仓库。

    1
    2
    3
    git add LICENSE.md
    git commit -m "Add MIT License"
    git push origin main

2. 验证许可证添加成功

添加许可证文件后,你可以在仓库页面的 “Code” 选项卡下看到新的 LICENSE 文件。此外,GitHub 会在仓库页面的右上角显示许可证类型,并提供一个链接,方便访问者查看完整的许可证内容。

3. 示例:添加 MIT 许可证

以下是 MIT 许可证的示例内容,你可以将其复制到你的 LICENSE 文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
MIT License

Copyright (c) [year] [fullname]

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

请将 [year][fullname] 替换为实际的年份和你的全名。通过以上步骤,你可以为你的 GitHub 仓库添加适当的许可证,明确项目的法律条款和使用条件。

9. Git LFS(大文件存储)

1. 什么是 Git LFS

Git LFS (Large File Storage) 是 Git 的一个扩展,用于高效管理大文件(如图片、视频、数据集等)。它将大文件存储在远程服务器上,而 Git 仓库中只保留指向这些文件的指针,如果你的项目里有 很大的文件,用普通 Git 会很慢,仓库也会变得巨大。这时就用 Git LFS。

2. 安装 Git LFS

Windows:

3. 基本使用流程

1
2
3
4
5
6
7
8
git lfs install             # 初始化 LFS(在仓库里跑一次)
git lfs track "*.psd" # 告诉 LFS 跟踪所有.psd 文件(换成你的大文件类型)
git lfs track "*.zip" # 可以多写几个,跟踪不同类型
git add .gitattributes # 提交 LFS 的配置文件
# 然后正常加文件、提交、推送
git add 大文件.psd
git commit -m "加个大文件"
git push origin main

4. 常见问题解决

  • 已提交的大文件如何迁移到 LFS?

    1
    2
    3
    git 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
2
3
4
5
6
7
8
9
10
11
12
13
14
# 忽略所有 Markdown 文档文件,不计入语言统计
*.md linguist-detectable=false

# 忽略所有 jpg 图片文件,不计入语言统计
*.jpg linguist-detectable=false

# 忽略所有 png 图片文件,不计入语言统计
*.png linguist-detectable=false

# 忽略所有 Jupyter Notebook 文件,不计入语言统计
*.ipynb linguist-detectable=false

# 强制将所有 .h 文件识别为 C++ 代码(否则可能被识别为 C)
*.h linguist-language=C++

3. 验证.gitattributes 是否生效

  1. 提交并推送 .gitattributes 文件
  2. 等待几分钟/几小时让 GitHub 重新计算
  3. 查看仓库语言统计是否更新

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. 合并分支:

    1
    2
    git checkout 目标分支  # 比如要合并到 main,先切到 main
    git merge 要合并的分支 # 比如 git merge feature/login
  2. 冲突解决:

    • 冲突文件里会有 <<<<<<< 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
2
git checkout main  # 切到本地 main
git pull origin 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 流程)

  1. 先在 GitHub 上 “Fork” 目标仓库,复制到自己账号下。
  2. 克隆到本地:git clone 自己的仓库链接
  3. 新建分支开发:git checkout -b feature/新功能
  4. 改完后提交推送:git add .git commit -m "说明"git push origin feature/新功能
  5. 在自己仓库页面点 “Compare & pull request”,发起 PR。
  6. 等审核,按反馈改(改完直接 push,PR 会自动更新)。
  7. 审核过了,对方合并到主分支。