1. Git与Bash环境基础认知
作为开发者日常最常用的版本控制工具,Git与Bash终端的组合堪称效率利器。我在团队协作中经常发现,许多新手开发者虽然能通过图形化界面完成基本操作,但遇到复杂场景时往往手足无措。实际上,掌握命令行操作不仅能提升工作效率,更是理解Git底层原理的捷径。
Bash作为Linux/macOS默认的Shell环境,其强大的脚本能力与Git命令形成完美互补。Windows用户通过Git Bash也能获得接近原生的体验。这里需要特别说明的是,所有Git命令本质上都是通过底层Bash环境执行的,即便在使用GUI工具时,最终转化的仍然是这些基础命令。
重要提示:建议所有开发者从项目初期就养成命令行操作习惯。图形界面虽然直观,但会隐藏许多关键细节,不利于排查问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境配置与初始化操作
2.1 Git环境快速搭建
对于不同操作系统,安装方式略有差异:
bash复制# macOS(推荐Homebrew方式)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install git
# Ubuntu/Debian
sudo apt update && sudo apt install -y git
# Windows
# 下载官方安装包(建议勾选"Use Git and optional Unix tools from the Command Prompt")
安装后验证版本:
bash复制git --version
2.2 基础配置模板
首次使用前必须设置用户信息:
bash复制git config --global user.name "你的姓名"
git config --global user.email "公司邮箱"
git config --global core.editor vim # 设置默认编辑器
# 常用优化配置
git config --global alias.st status # 创建快捷命令
git config --global init.defaultBranch main # 设置默认分支名
git config --global pull.rebase true # 合并时使用rebase
3. 仓库操作核心命令集
3.1 仓库创建与克隆
bash复制# 初始化新仓库(会在当前目录创建.git文件夹)
git init 项目名称
# 克隆远程仓库(支持HTTPS/SSH协议)
git clone https://github.com/username/repo.git
git clone git@github.com:username/repo.git
# 克隆指定分支
git clone -b dev git@github.com:username/repo.git
3.2 状态查看与差异比对
bash复制# 查看当前状态(最常用命令)
git status
# 精简版状态显示
git status -s
# 查看工作区与暂存区差异
git diff
# 查看暂存区与仓库差异
git diff --cached
# 图形化显示提交历史
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
4. 代码提交全流程操作
4.1 文件跟踪与提交
bash复制# 添加单个文件到暂存区
git add 文件名
# 添加所有修改(不包括新创建未跟踪文件)
git add -u
# 交互式添加(推荐)
git add -p
# 提交到本地仓库
git commit -m "清晰的提交信息"
# 修改上次提交(适用于漏文件或写错信息)
git commit --amend
4.2 撤销与回退操作
bash复制# 撤销工作区修改(危险操作!)
git checkout -- 文件名
# 从暂存区移除文件(保留工作区修改)
git reset HEAD 文件名
# 回退到指定提交(三种模式)
git reset --soft HEAD~1 # 仅回退提交记录
git reset --mixed HEAD~1 # 默认模式,回退提交和暂存
git reset --hard HEAD~1 # 彻底回退(慎用!)
# 恢复误删的文件
git rev-list -n 1 HEAD -- 文件名 # 先找到文件最后存在的commit
git checkout 提交哈希值 -- 文件名
5. 分支管理高阶技巧
5.1 基础分支操作
bash复制# 查看所有分支
git branch -av
# 创建新分支
git branch 分支名
# 切换分支
git checkout 分支名
git switch 分支名 # 新推荐方式
# 创建并切换分支
git checkout -b 新分支名
# 删除分支
git branch -d 分支名 # 安全删除
git branch -D 分支名 # 强制删除
5.2 合并与变基策略
bash复制# 普通合并(会产生合并提交)
git merge 分支名
# 变基操作(保持线性历史)
git rebase 目标分支
# 交互式变基(修改历史记录)
git rebase -i HEAD~3
# 解决冲突后继续变基
git rebase --continue
# 终止变基过程
git rebase --abort
6. 远程协作实战指南
6.1 远程仓库管理
bash复制# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin git@github.com:user/repo.git
# 修改远程地址
git remote set-url origin 新地址
# 删除远程分支
git push origin --delete 分支名
6.2 推送与拉取优化
bash复制# 推送到远程(首次需要-u参数)
git push -u origin 分支名
# 强制推送(覆盖远程历史,团队协作慎用)
git push -f
# 拉取更新(相当于fetch+merge)
git pull
# 推荐的安全拉取方式
git fetch origin
git merge origin/分支名
# 拉取时使用rebase避免多余合并提交
git pull --rebase
7. 高级应用场景解析
7.1 储藏临时修改
bash复制# 储藏当前工作区修改
git stash
# 查看储藏列表
git stash list
# 恢复最近储藏
git stash pop
# 应用指定储藏(不删除记录)
git stash apply stash@{n}
# 清理所有储藏
git stash clear
7.2 子模块管理
bash复制# 添加子模块
git submodule add https://github.com/user/repo.git 路径
# 克隆包含子模块的项目
git clone --recurse-submodules 项目地址
# 更新所有子模块
git submodule update --init --recursive
7.3 二分法调试
bash复制# 启动二分查找
git bisect start
# 标记错误提交
git bisect bad
# 标记正确提交
git bisect good 提交哈希
# 结束二分查找
git bisect reset
8. 常见问题排查手册
8.1 认证问题解决方案
bash复制# SSH认证测试
ssh -T git@github.com
# 切换HTTPS认证缓存
git config --global credential.helper store
# 临时修改远程URL为HTTPS
git remote set-url origin https://github.com/user/repo.git
8.2 典型错误处理
bash复制# 处理"not a git repository"错误
cd $(git rev-parse --show-toplevel) # 跳转到仓库根目录
# 解决"bad interpreter"错误(脚本换行符问题)
sed -i 's/\r$//' script.sh # 转换Windows换行符
# 修复"detached HEAD"状态
git checkout 分支名
# 恢复误删分支
git reflog # 查找分支最后存在的commit
git branch 分支名 提交哈希
8.3 性能优化技巧
bash复制# 清理历史大文件(需要BFG工具)
java -jar bfg.jar --strip-blobs-bigger-than 100M repo.git
# 重建Git对象库
git gc --aggressive
# 禁用无关文件监控(Mac)
git config --global core.ignorecase false
9. 自动化脚本实战
9.1 常用别名配置
bash复制# ~/.gitconfig 中添加:
[alias]
co = checkout
br = branch
ci = commit
st = status
unstage = reset HEAD --
last = log -1 HEAD
graph = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
9.2 批量操作脚本示例
bash复制#!/bin/bash
# 批量更新所有Git仓库
for dir in */; do
if [ -d "$dir/.git" ]; then
echo "Updating $dir"
(cd "$dir" && git pull)
fi
done
9.3 提交信息模板
创建~/.gitmessage模板:
code复制# <类型>(<作用域>): <主题>
# |<空行>
# |<正文>
# |<空行>
# |<页脚>
配置使用模板:
bash复制git config --global commit.template ~/.gitmessage
掌握这些命令组合后,可以尝试将这些操作封装成自动化脚本。比如我常用的一个自动同步脚本,会先检查工作区状态,然后拉取更新,最后如果有冲突会自动创建备份分支。这种程度的自动化可以节省大量重复操作时间。
