HiHuo
首页
博客
手册
工具
首页
博客
手册
工具
  • Git 高级用法

    • 修改冲突文件
    • Git 高级用法与全命令手册(架构师版)
    • Git 使用技巧参考手册
    • Git 完整手册(中高级开发者版)

Git 使用技巧参考手册

专为新手用户设计的 Git 实用技巧指南

目录

  1. 基础概念
  2. 提交历史管理
  3. 分支操作技巧
  4. 远程仓库操作
  5. 代码合并与冲突解决
  6. 撤销与回退操作
  7. 高级技巧
  8. 常见问题解决
  9. 最佳实践

基础概念

什么是 Git?

Git 是一个分布式版本控制系统,用于跟踪文件的变化。想象成是一个"时光机",可以记录代码的每个版本。

核心概念

  • 仓库 (Repository): 项目的文件夹,包含所有代码和历史记录
  • 提交 (Commit): 代码的一个"快照",包含变更和说明
  • 分支 (Branch): 代码的平行开发线,互不干扰
  • 远程仓库 (Remote): 网络上的代码仓库,如 GitHub、Gitee

提交历史管理

1. 修改最后一次提交 (git commit --amend)

作用

修改最近一次提交的内容或提交信息,而不创建新的提交。

使用场景

  • 忘记添加某个文件到提交中
  • 提交信息写错了需要修改
  • 想要合并多个小提交为一个

使用方法

# 修改提交信息
git commit --amend -m "新的提交信息"

# 修改提交内容(添加文件)
git add 忘记的文件.txt
git commit --amend --no-edit

# 修改提交内容(修改文件)
# 先修改文件,然后:
git add 修改的文件.txt
git commit --amend --no-edit

效果

  • 原来的提交被替换为新的提交
  • 提交历史更整洁
  • 不会增加额外的提交记录

️ 注意事项

  • 只能修改最后一次提交
  • 如果已经推送到远程,需要强制推送
  • 不要修改已经分享给别人的提交

2. 交互式变基 (git rebase -i)

作用

重新整理提交历史,可以合并、分割、重排序提交。

使用场景

  • 合并多个小提交
  • 重新排序提交
  • 修改提交信息
  • 删除不需要的提交

使用方法

# 修改最近3个提交
git rebase -i HEAD~3

# 修改从某个提交开始的所有提交
git rebase -i 提交hash

交互式界面操作

pick abc1234 第一个提交
squash def5678 第二个提交  # 合并到上一个
edit ghi9012 第三个提交   # 暂停编辑
drop jkl3456 第四个提交   # 删除提交

效果

  • 提交历史更清晰
  • 可以合并相关的小提交
  • 删除无用的提交

分支操作技巧

1. 创建和切换分支

作用

创建新的开发分支,避免影响主分支。

使用场景

  • 开发新功能
  • 修复 bug
  • 实验性开发

使用方法

# 创建并切换到新分支
git checkout -b 新分支名

# 或者使用新语法
git switch -c 新分支名

# 基于特定提交创建分支
git checkout -b 新分支名 提交hash

2. 分支合并策略

作用

将分支的更改合并到目标分支。

合并方式对比

方式命令特点适用场景
快进合并git merge --ff-only保持线性历史简单功能开发
普通合并git merge创建合并提交功能分支合并
变基合并git rebase重写历史保持历史整洁

使用方法

# 切换到目标分支
git checkout main

# 合并分支
git merge 功能分支

# 删除已合并的分支
git branch -d 功能分支

远程仓库操作

1. 强制推送 (git push --force)

作用

强制更新远程分支,覆盖远程的提交历史。

使用场景

  • 修改了本地提交历史(如 amend、rebase)
  • 需要覆盖远程的错误提交
  • 清理提交历史

使用方法

# 强制推送(危险)
git push --force

# 安全强制推送(推荐)
git push --force-with-lease

# 强制推送到特定分支
git push --force-with-lease origin 分支名

效果对比

  • --force: 直接覆盖,可能丢失他人工作
  • --force-with-lease: 检查远程是否有新提交,更安全

️ 注意事项

  • 只在私有分支或确定安全时使用
  • 不要在主分支上强制推送
  • 使用前确保备份重要数据

2. 拉取远程更改

作用

获取远程仓库的最新更改。

使用方法

# 拉取并合并
git pull

# 拉取但不合并
git fetch

# 拉取特定分支
git pull origin 分支名

# 拉取所有远程分支
git fetch --all

代码合并与冲突解决

1. 处理合并冲突

冲突产生原因

  • 多人同时修改同一文件的同一部分
  • 分支合并时的代码冲突

解决步骤

# 1. 尝试合并
git merge 分支名

# 2. 如果有冲突,查看冲突文件
git status

# 3. 编辑冲突文件,选择保留的代码
# 冲突标记:
# <<<<<<< HEAD
# 当前分支的代码
# =======
# 要合并分支的代码
# >>>>>>> 分支名

# 4. 标记冲突已解决
git add 冲突文件

# 5. 完成合并
git commit

2. 使用合并工具

作用

可视化解决冲突,更直观。

配置合并工具

# 配置 VS Code 作为合并工具
git config --global merge.tool vscode
git config --global mergetool.vscode.cmd 'code --wait $MERGED'

# 使用合并工具
git mergetool

撤销与回退操作

1. 撤销工作区更改

作用

放弃对文件的修改,恢复到上次提交的状态。

使用方法

# 撤销单个文件
git checkout -- 文件名

# 撤销所有文件
git checkout -- .

# 新语法
git restore 文件名
git restore .

2. 撤销暂存区更改

作用

将已添加到暂存区的文件移回工作区。

使用方法

# 撤销单个文件
git reset HEAD 文件名

# 撤销所有文件
git reset HEAD

# 新语法
git restore --staged 文件名
git restore --staged .

3. 回退提交

作用

撤销已提交的更改。

使用方法

# 软回退(保留更改)
git reset --soft HEAD~1

# 混合回退(默认,保留工作区)
git reset --mixed HEAD~1

# 硬回退(完全删除)
git reset --hard HEAD~1

# 回退到特定提交
git reset --hard 提交hash

效果对比

  • --soft: 只移动 HEAD,保留暂存区和工作区
  • --mixed: 移动 HEAD 和暂存区,保留工作区
  • --hard: 完全回退,丢失所有更改

高级技巧

1. 暂存更改 (git stash)

作用

临时保存工作区的更改,方便切换分支。

使用场景

  • 需要切换分支但工作未完成
  • 临时保存实验性代码
  • 处理紧急 bug 修复

使用方法

# 暂存当前更改
git stash

# 暂存并添加说明
git stash save "功能开发中"

# 查看暂存列表
git stash list

# 恢复暂存
git stash pop

# 恢复特定暂存
git stash apply stash@{0}

# 删除暂存
git stash drop stash@{0}

2. 查找提交历史

作用

快速定位特定的提交或更改。

使用方法

# 查看提交历史
git log --oneline

# 查看文件历史
git log -- 文件名

# 查看谁修改了某行代码
git blame 文件名

# 搜索提交信息
git log --grep="关键词"

# 查看两个提交的差异
git diff 提交1 提交2

3. 子模块管理

作用

在项目中包含其他 Git 仓库。

使用方法

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

# 初始化子模块
git submodule init

# 更新子模块
git submodule update

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

常见问题解决

1. 提交到错误分支

问题

代码提交到了错误的分支。

解决方案

# 1. 记录提交 hash
git log --oneline

# 2. 切换到正确分支
git checkout 正确分支

# 3. 应用提交
git cherry-pick 提交hash

# 4. 从错误分支删除提交
git checkout 错误分支
git reset --hard HEAD~1

2. 忘记添加文件到提交

问题

提交后发现忘记添加某个文件。

解决方案

# 添加文件并修改提交
git add 忘记的文件
git commit --amend --no-edit

3. 提交信息写错

问题

提交信息有拼写错误或描述不准确。

解决方案

# 修改最后一次提交信息
git commit --amend -m "正确的提交信息"

4. 误删文件

问题

不小心删除了重要文件。

解决方案

# 恢复文件
git checkout HEAD -- 文件名

# 或者
git restore 文件名

最佳实践

1. 提交规范

提交信息格式

类型(范围): 简短描述

详细描述(可选)

相关Issue: #123

常用类型

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

示例

feat(auth): 添加用户登录功能

- 实现用户名密码登录
- 添加记住登录状态
- 支持第三方登录

相关Issue: #123

2. 分支命名规范

命名格式

类型/描述

常用类型

  • feature/: 新功能
  • bugfix/: 修复 bug
  • hotfix/: 紧急修复
  • release/: 发布版本
  • chore/: 维护任务

示例

feature/user-authentication
bugfix/login-error-handling
hotfix/security-patch

3. 工作流程建议

日常开发流程

  1. 从主分支创建功能分支
  2. 在功能分支上开发
  3. 定期提交代码
  4. 开发完成后合并到主分支
  5. 删除功能分支

代码审查流程

  1. 推送功能分支到远程
  2. 创建 Pull Request/Merge Request
  3. 等待代码审查
  4. 根据反馈修改代码
  5. 审查通过后合并

4. 安全建议

保护重要分支

# 设置分支保护
git config branch.main.protect true

定期备份

# 创建备份分支
git branch backup-$(date +%Y%m%d)

使用 .gitignore

# 忽略敏感文件
echo "config/secrets.yml" >> .gitignore
echo "*.log" >> .gitignore

常用命令速查表

基础操作

命令作用
git init初始化仓库
git clone <url>克隆仓库
git add <file>添加文件到暂存区
git commit -m "msg"提交更改
git status查看状态
git log查看提交历史

分支操作

命令作用
git branch查看分支
git branch <name>创建分支
git checkout <name>切换分支
git merge <branch>合并分支
git branch -d <name>删除分支

远程操作

命令作用
git remote -v查看远程仓库
git push origin <branch>推送到远程
git pull origin <branch>从远程拉取
git fetch获取远程更新

撤销操作

命令作用
git checkout -- <file>撤销文件修改
git reset HEAD <file>撤销暂存
git reset --hard HEAD~1回退提交
git revert <commit>撤销提交

总结

Git 是一个强大的版本控制工具,掌握这些技巧可以大大提高开发效率。记住:

  1. 安全第一: 重要操作前先备份
  2. 小步提交: 频繁提交,保持历史清晰
  3. 规范命名: 使用统一的命名规范
  4. 团队协作: 遵循团队的工作流程
  5. 持续学习: Git 功能丰富,不断学习新技巧

希望这份手册能帮助你更好地使用 Git!如有问题,欢迎随时查阅或询问。


最后更新: 2025年1月

Prev
Git 高级用法与全命令手册(架构师版)
Next
Git 完整手册(中高级开发者版)