在软件开发领域,Git 已成为版本控制的事实标准。无论是个人项目还是团队协作,掌握 Git 不仅能提高开发效率,更能帮助开发者建立清晰的版本管理思维。本文将带你系统学习 Git 的完整工作流程,从基础操作到高级技巧,助你成为 Git 使用高手。
工作目录 (Working Directory)
↓ 修改文件
暂存区 (Staging Area)
↓ 提交更改
本地仓库 (Local Repository)
↓ 推送更新
远程仓库 (Remote Repository)brew install gitsudo apt-get install git# 配置用户信息
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
# 配置默认编辑器(可选)
git config --global core.editor "code --wait"
# 查看配置
git config --list# 创建命令别名,提高效率
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
# 启用彩色输出
git config --global color.ui auto
# 保存凭证(避免重复输入密码)
git config --global credential.helper store# 创建全新仓库
mkdir my-project
cd my-project
git init
# 或克隆现有仓库
git clone https://github.com/username/repo.git
git clone https://github.com/username/repo.git my-folder # 指定目录名git status
git status -s # 简洁模式git add filename.txt # 添加单个文件
git add *.js # 添加所有js文件
git add src/ # 添加整个目录
git add . # 添加所有更改
git add -p # 交互式添加(推荐!)git commit -m "添加用户登录功能"
git commit -m "feat: 新增用户登录界面" # 使用约定式提交
# 最佳实践:详细的提交信息
git commit
# 编辑器打开后输入:
# 第一行:简要说明(不超过50字符)
# 第二行:空行
# 第三行及以后:详细说明更改原因和内容# 查看提交历史
git log
git log --oneline # 单行显示
git log --graph # 图形化显示分支
git log -p # 显示具体更改内容
# 比较差异
git diff # 工作区与暂存区差异
git diff --staged # 暂存区与最后一次提交差异
git diff HEAD # 工作区与最后一次提交差异
git diff commit1 commit2 # 两次提交之间的差异# 场景1:撤销工作区修改
git checkout -- filename.txt
# 场景2:从暂存区移除文件
git reset HEAD filename.txt
# 场景3:修改最后一次提交
git commit --amend -m "新的提交信息"
# 场景4:回退到指定提交(慎用!)
git reset --soft HEAD~1 # 仅回退提交,保留更改到暂存区
git reset --mixed HEAD~1 # 默认,回退提交和暂存区,保留工作区
git reset --hard HEAD~1 # 彻底回退,慎用!
# 场景5:恢复已删除的文件
git checkout HEAD -- deleted-file.txt# 查看分支
git branch # 本地分支
git branch -a # 所有分支(包括远程)
git branch -v # 显示最后一次提交
# 创建与切换
git branch feature-login # 创建分支
git checkout feature-login # 切换分支
git checkout -b feature-login # 创建并切换(常用!)
# 删除分支
git branch -d feature-old # 安全删除(已合并)
git branch -D feature-old # 强制删除(未合并)# 1. 合并分支(快速前进)
git checkout main
git merge feature-login
# 2. 处理合并冲突
# 当出现冲突时,Git 会标记冲突文件
<<<<<<< HEAD
当前分支的内容
=======
要合并的分支内容
>>>>>>> feature-login
# 3. 手动解决冲突后
git add resolved-file.txt
git commit -m "合并feature-login分支,解决冲突"# 将当前分支变基到main
git checkout feature
git rebase main
# 交互式变基(修改历史)
git rebase -i HEAD~3 # 修改最近3次提交# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add origin https://github.com/user/repo.git
# 推送代码
git push -u origin main # 首次推送,设置上游分支
git push # 后续推送
# 拉取更新
git pull # 拉取并合并
git fetch # 只拉取不合并
git pull --rebase # 拉取并使用变基
# 跟踪远程分支
git checkout --track origin/featuregit pull --rebasegit stash # 储藏所有更改
git stash save "描述信息" # 带描述的储藏
git stash list # 查看储藏列表
git stash pop # 恢复最新储藏并删除
git stash apply stash@{0} # 恢复指定储藏
git stash drop # 删除储藏
git stash clear # 清空所有储藏# 创建标签
git tag v1.0.0 # 轻量标签
git tag -a v1.0.0 -m "版本1.0.0发布" # 附注标签
# 推送标签
git push origin v1.0.0
git push origin --tags # 推送所有标签# 在 .git/hooks/ 目录下创建脚本
pre-commit # 提交前检查代码
pre-push # 推送前运行测试
post-merge # 合并后自动安装依赖git commit --amend # 修改最后一次提交信息# 1. 从历史中彻底删除文件
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch 敏感文件.txt' \
--prune-empty --tag-name-filter cat -- --all
# 2. 强制推送
git push origin --force --all# 查看已合并到当前分支的分支
git branch --merged
# 批量删除已合并的分支(除了main)
git branch --merged | grep -v "main" | xargs git branch -d# 查找分支最后的提交哈希
git reflog
# 基于哈希恢复分支
git branch feature-recovered abc1234main ── develop ── feature/login
├── feature/payment
└── release/v1.2git pull --rebase 保持历史线性实践建议:创建一个练习仓库,按照本文流程逐一尝试每个命令。记住,Git 的掌握在于实践,遇到问题多查阅文档,善用 git --help 查看帮助信息。熟练使用 Git 后,你的开发效率将会得到质的提升!