在这里插入图片描述

在这里插入图片描述


1. Git 基础概念

核心概念

  • 仓库(Repository):项目的历史记录和元数据存储
  • 提交(Commit):项目的快照,包含唯一 SHA-1 哈希值
  • 分支(Branch):指向提交的可移动指针
  • HEAD:当前工作位置的指针
  • 暂存区(Staging Area):准备提交的中间区域

文件状态生命周期

git add
git commit
修改文件
git add
git checkout
Untracked
Staged
Committed
Modified

2. 安装与配置

安装 Git

# Ubuntu/Debian
sudo apt-get install git

# CentOS/RHEL
sudo yum install git

# macOS (Homebrew)
brew install git

# Windows
# 下载安装包:https://git-scm.com/download/win

基础配置

# 设置用户名和邮箱(全局)
git config --global user.name "Your Name"
git config --global user.email "email@example.com"

# 设置默认编辑器
git config --global core.editor "code --wait"  # VS Code

# 查看配置
git config --list

# 设置别名
git config --global alias.st status
git config --global alias.ci commit
git config --global alias.co checkout
git config --global alias.br branch

重要配置文件位置

  • 系统级:/etc/gitconfig
  • 用户级:~/.gitconfig
  • 仓库级:.git/config

3. 仓库操作

初始化仓库

# 新建仓库
mkdir project && cd project
git init

# 克隆现有仓库
git clone https://github.com/user/repo.git
git clone --depth 1 https://github.com/user/repo.git  # 浅克隆(仅最新提交)

仓库结构

.git/
├── HEAD          # 当前分支指针
├── config        # 仓库配置
├── objects/      # 数据对象
├── refs/         # 分支和标签指针
│   ├── heads/    # 本地分支
│   └── tags/     # 标签
└── index         # 暂存区文件

4. 基础工作流

标准工作流程

# 1. 修改文件
echo "Hello World" > file.txt

# 2. 查看状态
git status

# 3. 添加到暂存区
git add file.txt
git add .          # 添加所有变更
git add -p         # 交互式添加(部分添加)

# 4. 提交
git commit -m "Add initial file"
git commit -am "修改说明"  # 跳过add直接提交已跟踪文件

# 5. 查看历史
git log
git log --oneline --graph --all  # 图形化查看

提交规范示例

git commit -m "feat: 添加用户登录功能

- 实现JWT认证
- 添加登录API端点
- 完善错误处理

Close #123"

推荐使用约定式提交规范

  • feat: 新功能
  • fix: bug修复
  • docs: 文档变更
  • style: 格式变更
  • refactor: 重构代码
  • test: 测试变更
  • chore: 构建或辅助工具变更

5. 分支管理

分支操作

# 创建分支
git branch feature-login
git checkout -b feature-login  # 创建并切换

# 切换分支
git checkout main
git switch main  # Git 2.23+ 推荐方式

# 合并分支
git checkout main
git merge feature-login

# 删除分支
git branch -d feature-login  # 安全删除
git branch -D feature-login  # 强制删除未合并分支

# 重命名分支
git branch -m old-name new-name

分支策略示例

变基(Rebase)与合并(Merge)

# 合并(保留完整历史)
git checkout main
git merge feature

# 变基(线性历史)
git checkout feature
git rebase main

# 交互式变基(修改历史)
git rebase -i HEAD~3  # 修改最近3个提交

注意事项

  1. 不要在公共分支上变基(会重写历史)
  2. 变基后需要强制推送:git push --force-with-lease
  3. 团队协作时优先使用合并

6. 远程协作

远程仓库操作

# 添加远程仓库
git remote add origin https://github.com/user/repo.git

# 查看远程
git remote -v

# 重命名远程
git remote rename origin upstream

# 移除远程
git remote remove origin

# 拉取更新
git fetch origin         # 仅获取元数据
git pull origin main     # fetch + merge
git pull --rebase        # fetch + rebase(推荐)

# 推送分支
git push origin main
git push -u origin main  # 设置上游跟踪

# 删除远程分支
git push origin --delete feature-old

协作工作流

开发者A 远程仓库 开发者B git push origin main 通知更新 git fetch origin git rebase origin/main git push origin feature 开发者A 远程仓库 开发者B

解决冲突

当多人修改同一文件时:

# 1. 拉取最新代码(会提示冲突)
git pull origin main

# 2. 打开冲突文件
<<<<<<< HEAD
本地修改内容
=======
远程修改内容
>>>>>>> commit-hash

# 3. 手动解决冲突后
git add resolved-file.txt
git commit -m "解决合并冲突"
git push

7. 高级操作

贮藏变更

# 临时保存未提交的修改
git stash

# 查看贮藏列表
git stash list

# 应用贮藏
git stash apply stash@{0}

# 创建新分支并应用贮藏
git stash branch new-feature

# 删除贮藏
git stash drop stash@{0}

二分查找(定位问题提交)

git bisect start
git bisect bad         # 当前版本有问题
git bisect good v1.0   # v1.0版本正常

# 测试当前版本后标记结果
git bisect good  # 如果当前版本正常
git bisect bad   # 如果当前版本有问题

# 结束后重置
git bisect reset

重写历史

# 修改最近一次提交
git commit --amend

# 交互式重写多个提交
git rebase -i HEAD~3

# 选项说明:
# pick: 使用提交
# reword: 修改提交信息
# edit: 修改提交内容
# squash: 合并到前一个提交
# fixup: 合并并丢弃提交信息
# drop: 删除提交

大文件存储(LFS)

# 安装Git LFS
git lfs install

# 跟踪大文件类型
git lfs track "*.psd"
git lfs track "*.zip"

# 查看跟踪的文件
git lfs ls-files

8. 撤销与恢复

撤销工作区修改

# 放弃单个文件修改
git checkout -- filename.txt

# 放弃所有修改
git restore .  # Git 2.23+
git checkout -- .

撤销暂存区文件

git reset HEAD filename.txt
git restore --staged filename.txt  # Git 2.23+

撤销提交

# 撤销上一次提交(保留修改)
git reset --soft HEAD~1

# 完全撤销提交(丢弃修改)
git reset --hard HEAD~1

# 恢复误删的提交
git reflog  # 查找提交哈希
git reset --hard <commit-hash>

恢复删除的文件

# 查看删除历史
git log --diff-filter=D -- path/to/file

# 恢复文件
git checkout <commit-hash>^ -- path/to/file

9. 子模块与工作树

子模块

# 添加子模块
git submodule add https://github.com/user/lib.git

# 克隆包含子模块的项目
git clone --recurse-submodules https://github.com/user/project.git

# 更新子模块
git submodule update --init --recursive

多工作树

# 创建工作树
git worktree add ../hotfix hotfix-branch

# 列出工作树
git worktree list

# 移除工作树
git worktree remove hotfix-branch

10. Git 钩子

常用钩子示例

# .git/hooks/pre-commit
#!/bin/sh
# 运行代码检查
npm run lint

# .git/hooks/pre-push
#!/bin/sh
# 运行测试
npm test

客户端钩子

  • pre-commit: 提交前运行
  • prepare-commit-msg: 准备提交信息
  • commit-msg: 验证提交信息
  • post-commit: 提交完成后

服务端钩子

  • pre-receive: 处理推送前
  • update: 按分支处理
  • post-receive: 推送完成后

最佳实践:使用 Husky 管理 Git 钩子


11. 最佳实践与注意事项

提交规范

  1. 提交信息清晰描述变更内容
  2. 遵循团队约定的提交规范
  3. 每个提交保持单一责任原则
  4. 避免提交大文件(使用 LFS)
  5. 不要提交敏感信息(密码、密钥)

分支管理策略

  1. 主分支main/master(稳定版)
  2. 开发分支develop(集成环境)
  3. 功能分支feature/*(新功能开发)
  4. 修复分支hotfix/*(紧急修复)
  5. 发布分支release/*(版本准备)

协作注意事项

  1. 频繁拉取上游变更
  2. 推送前在本地运行测试
  3. 使用 --force-with-lease 代替 --force
  4. 定期清理过时分支
  5. 使用 Pull Request/Merge Request 进行代码审查

性能优化

# 仓库维护
git gc --auto

# 清理历史大文件(使用 BFG)
bfg --delete-files '*.zip' my-repo.git

# 浅克隆大型仓库
git clone --depth 1 https://github.com/large-repo.git

12. 常见问题解决方案

1. 提交了错误文件

# 保留文件但从Git历史中移除
git filter-branch --tree-filter 'rm -f sensitive.txt' HEAD

# 更高效的工具
git filter-repo --invert-paths --path sensitive.txt

2. 忘记创建分支直接提交到 main

# 1. 创建新分支保存当前状态
git branch temp-branch

# 2. 重置main分支
git checkout main
git reset --hard origin/main

# 3. 切换到新分支继续工作
git checkout temp-branch

3. 合并后需要撤销

# 撤销合并提交
git revert -m 1 <merge-commit-hash>

4. 证书问题

# 忽略SSL验证(临时解决)
git config --global http.sslVerify false

# 永久解决方案:更新CA证书
sudo apt-get install ca-certificates

5. 中文文件名乱码

# 显示UTF-8文件名
git config --global core.quotepath false

Git 命令速查表

类别 命令 描述
基础 git init 初始化仓库
git clone <url> 克隆仓库
git status 查看状态
提交 git add <file> 添加文件到暂存区
git commit -m "msg" 提交变更
git commit --amend 修改上次提交
分支 git branch 列出分支
git checkout <branch> 切换分支
git merge <branch> 合并分支
远程 git fetch 获取远程更新
git pull 拉取并合并
git push 推送到远程
撤销 git restore <file> 撤销工作区修改
git reset <commit> 重置到指定提交
git revert <commit> 创建撤销提交
日志 git log 查看提交历史
git diff 查看差异
高级 git stash 暂存变更
git rebase 变基操作
git bisect 二分查找问题

在这里插入图片描述

提示:使用 git help <command> 查看命令详细帮助
实践是最好的学习方式,多在实际项目中应用这些命令,逐渐形成自己的工作流。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐