git 使用的各种场景

一、基础操作场景

1. 仓库初始化
# 本地初始化
git init 
git init --bare                  # 创建裸仓库(无工作区)
git init -b main                 # 指定默认分支名

# 克隆远程仓库
git clone https://github.com/user/repo.git
git clone --depth 1<url># 浅克隆(仅最新历史)
git clone --branch develop <url># 克隆特定分支
2. 文件状态管理
git status                       # 标准状态
git status -s                    # 简洁状态(??=未跟踪,A=已暂存)
git status -vv                   # 显示详细差异

# 文件追踪
gitadd index.html               # 添加单个文件
gitadd.# 添加所有修改
gitadd -u                       # 仅添加已跟踪文件
gitadd -p                       # 交互式添加(选择性暂存)
3. 提交操作
git commit -m "Initial commit"# 基础提交
git commit -am "Quick commit"# 跳过暂存直接提交(仅限已跟踪文件)
git commit --amend               # 修改最近提交(可修改信息或内容)
git commit --allow-empty         # 创建空提交(用于触发CI)

二、分支管理场景

1. 分支操作
git branch                       # 查看本地分支
git branch -r                    # 查看远程分支
git branch -a                    # 查看所有分支
git branch feature/login         # 创建分支
git checkout -b hotfix           # 创建并切换分支(旧版)
git switch -c dev                # 创建并切换分支(推荐)
git branch -d feature/old        # 删除已合并分支
git branch -D feature/abandoned  # 强制删除未合并分支
2. 分支合并
git merge feature/payment        # 普通合并
git merge --no-ff feature/auth   # 禁用快进合并(保留分支历史)
git merge --squash feature/ui    # 压缩合并(多个提交合并为1个)

# 合并冲突解决
git mergetool                    # 使用配置的冲突解决工具
gitdiff --name-only --diff-filter=U # 查看冲突文件列表
3. 变基操作
git rebase main                  # 将当前分支变基到main
git rebase -i HEAD~3             # 交互式变基(修改最近3个提交)

# 变基操作指令:
# p/pick = 保留提交
# r/reword = 修改提交信息
# e/edit = 修改提交内容
# s/squash = 合并到前一个提交
# f/fixup = 合并并丢弃提交信息

三、远程协作场景

1. 远程仓库管理
git remote add origin <url># 添加远程仓库
git remote -v                    # 查看远程仓库
git remote set-url origin <new-url># 修改远程URL
git remote prune origin          # 清理本地无效远程分支引用
2. 推送操作
git push origin main             # 推送本地分支
git push -u origin feature      # 推送并设置上游分支
git push --force-with-lease      # 安全强制推送(避免覆盖他人提交)
git push --all                   # 推送所有分支
git push --tags                  # 推送所有标签
3. 拉取操作
git fetch origin                 # 获取远程更新(不合并)
git pull                         # 拉取并合并(= fetch + merge)
git pull --rebase                # 拉取并变基(推荐)
git pull origin main:dev         # 拉取远程main到本地dev

四、历史管理场景

1. 查看历史
git log                          # 标准日志
git log --oneline                # 简洁单行日志
git log --graph --decorate       # 图形化分支历史
git log -p README.md             # 查看文件修改历史
git log -S "search_term"# 按内容搜索提交
git log --since="2023-01-01"# 按时间过滤
2. 版本回退
git reset HEAD~1                 # 回退提交(保留修改)
git reset --soft HEAD~1          # 回退提交(保留修改到暂存区)
git reset --hard HEAD~1          # 彻底回退(丢弃修改)

# 恢复删除的文件
git checkout <commit> -- path/to/file
3. 撤销操作
git restore README.md            # 撤销工作区修改
git restore --staged README.md   # 撤销暂存区修改
git revert <commit># 创建反向提交(安全撤销)

五、高级应用场景

1. 储藏操作(Stash)
git stash                        # 储藏当前修改
git stash push -m "WIP"# 命名储藏
git stash list                   # 查看储藏列表
git stash apply stash@{1}# 应用指定储藏
git stash pop                    # 应用并删除最新储藏
git stash drop stash@{0}# 删除储藏
2. 标签管理
git tag v1.0.0                   # 轻量标签
git tag -a v1.1.0 -m "Release"# 附注标签
git push origin v1.1.0           # 推送单个标签
git push origin --tags           # 推送所有标签
git tag -d v0.9                  # 删除本地标签
git push origin :refs/tags/v0.9  # 删除远程标签
3. 子模块管理
git submodule add<url> libs     # 添加子模块
git submodule update --init      # 初始化子模块
git submodule update --remote    # 更新子模块到最新
git submodule foreach 'git pull'# 批量更新所有子模块

六、调试与诊断场景

1. 二分法调试
git bisect start                 # 开始二分
git bisect bad HEAD              # 标记当前为坏版本
git bisect good v1.0             # 标记已知好版本
# 测试后标记结果
git bisect good/bad              
git bisect reset                 # 结束二分
2. 文件追溯
git blame index.html             # 逐行查看修改者
git blame -L 10,20 app.js        # 查看指定行范围
git show <commit># 查看提交详情
3. 数据恢复
git reflog                       # 查看操作历史
git checkout HEAD@{1}# 切换到前一个状态
git branch recovery HEAD@{5}# 从reflog创建分支

七、配置与优化场景

1. 全局配置
git config --global user.name "John"
git config --global user.email "john@example.com"
git config --global core.editor "code --wait"
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"
2. 仓库优化
git gc                           # 垃圾回收
git repack -ad                   # 重新打包对象
gitfsck --full                  # 检查仓库完整性
3. 大文件处理(LFS)
git lfs install# 初始化LFS
git lfs track "*.psd"# 跟踪大文件类型
gitadd .gitattributes           # 提交跟踪配置

八、工作流实践

1. Git Flow

图片

git flow init                    # 初始化Git Flow
git flow feature start login     # 启动新功能
git flow feature finish login    # 完成功能开发
2. GitHub Flow
git checkout -b feature          # 创建功能分支
# 开发后创建PR
git push origin feature
# 通过后合并到main
3. Rebase工作流
git checkout feature
git fetch origin
git rebase origin/main           # 变基到最新main
# 解决冲突
git rebase --continue
git push -f                     # 强制更新分支

九、高级技巧

1. 部分暂存
gitadd -p                       # 交互式选择修改片段
2. 提交范围操作
git cherry-pick A^..C            # 选择提交范围(A到C)
3. 重写历史
git filter-branch --tree-filter 'rm -f password.txt' HEAD
4. 补丁操作
git format-patch HEAD~2          # 生成最近2个提交的补丁
git am *.patch                   # 应用补丁

十、故障处理

1. 撤销误操作
git reset --soft ORIG_HEAD       # 撤销错误的合并/变基
2. 恢复删除分支
git checkout -b recovery $(git reflog |grep'commit: Created'|awk'{print $1}')
3. 修复损坏仓库
gitfsck --full
git prune
git repack -a -d -f --depth=50 --window=250

完整命令速查表

类别

命令

功能描述

基础操作git init

初始化仓库

git clone <url>

克隆远程仓库

git add <file>

添加文件到暂存区

git commit -m "msg"

提交更改

分支管理git switch -c <branch>

创建并切换分支

git merge --no-ff <branch>

非快进合并

git rebase <base>

变基操作

远程协作git push -u origin <branch>

推送并设置上游分支

git pull --rebase

变基式拉取

git fetch --prune

清理无效远程分支引用

历史操作git reset --hard HEAD~1

回退到上一版本

git revert <commit>

创建撤销提交

git cherry-pick <commit>

选择性应用提交

调试诊断git bisect start

启动二分调试

git reflog

查看操作历史

git blame <file>

文件逐行追溯

高级功能git stash -u

储藏未跟踪文件

git submodule update --remote

更新子模块

git filter-branch

批量重写历史


最佳实践原则

  1. 提交规范

    feat(module): add login function
    ^    ^       ^
    |    |       |- 简要描述
    |    |------- 作用域
    |------------ 类型(feat/fix/docs/ci)
    
  2. 分支策略

    • main

      :生产环境代码

    • develop

      :集成开发分支

    • feature/*

      :功能开发分支

    • hotfix/*

      :紧急修复分支

  3. 协作规则

    • 使用 --force-with-lease 代替 --force

    • 优先使用 rebase 保持历史线性

    • PR/MR 需通过 CI 测试和 Code Review

  4. 安全建议

    git config --global transfer.fsckobjects true# 传输时检查对象
    git config --global receive.fsckObjects true# 接收时检查对象
    

掌握这些命令组合,可覆盖 95% 的日常开发场景。建议配合 .gitconfig 别名提升效率,例如:

[alias]
  lol = log --graph --decorate --oneline
  st = status -sb
  cm = commit -m
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值