Git是目前最流行的分布式版本控制系统,几乎所有开发团队都在使用。掌握Git不仅是程序员的必备技能,也是个人项目管理的重要工具。本教程覆盖日常开发中最常用的Git操作。
一、初始化配置
# 设置用户信息
git config --global user.name "你的名字"
git config --global user.email "your@email.com"
# 初始化新仓库
git init
git add .
git commit -m "Initial commit"
# 克隆远程仓库
git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git
二、日常开发流程
# 查看状态(最常用的命令之一)
git status
# 添加文件到暂存区
git add filename.php # 添加指定文件
git add . # 添加所有修改
# 提交到本地仓库
git commit -m "feat: 添加用户登录功能"
git commit -am "fix: 修复分页bug" # -a自动添加已跟踪文件的修改
# 查看提交历史
git log --oneline --graph --all
git log --author="张三" --since="2026-01-01"
# 查看文件改动
git diff # 工作区 vs 暂存区
git diff --cached # 暂存区 vs 最近一次提交
git diff HEAD~1 # 与上一次提交的对比
三、分支管理
# 创建并切换到新分支
git checkout -b feature/login
# 或使用新语法
git switch -c feature/login
# 查看所有分支
git branch -a
# 合并分支(先切回主分支)
git switch main
git merge feature/login
# 变基合并(保持提交历史整洁)
git rebase main # 在feature分支上执行
# 删除分支
git branch -d feature/login # 已合并的分支
git branch -D feature/old # 强制删除未合并的分支
# 查看分支合并图
git log --oneline --graph --all --decorate
四、远程协作
# 关联远程仓库
git remote add origin https://github.com/user/repo.git
# 推送到远程
git push origin main
git push -u origin feature/login # 首次推送新分支
# 拉取远程更新
git pull origin main
git fetch origin # 只下载,不合并
# 查看远程信息
git remote -v
# 多人协作流程
git fetch origin
git rebase origin/main # 将本地提交变基到远程最新
git push origin feature/xxx # 推送后发起Pull Request
五、实用技巧
暂存工作(Stash)
# 临时保存当前修改
git stash
git stash save "正在做的功能,需要紧急修复bug"
# 查看暂存列表
git stash list
# 恢复暂存
git stash pop # 恢复并删除暂存记录
git stash apply stash@{0} # 恢复但保留暂存记录
撤销操作
# 撤销工作区修改
git checkout -- filename.php
git restore filename.php
# 撤销暂存(不丢失修改)
git reset HEAD filename.php
git restore --staged filename.php
# 修改最后一次提交信息
git commit --amend -m "新的提交信息"
# 回退到指定版本
git reset --soft HEAD~1 # 保留修改在暂存区
git reset --mixed HEAD~1 # 保留修改在工作区
git reset --hard HEAD~1 # 完全丢弃修改(危险!)
标签管理
# 创建标签
git tag v1.0.0
git tag -a v1.0.0 -m "Release version 1.0.0"
# 推送标签
git push origin v1.0.0
git push origin --tags # 推送所有标签
# 查看标签
git tag -l
六、团队协作工作流
推荐的工作流程(Git Flow简化版):
- main 分支:始终保持可发布的稳定状态
- develop 分支:日常开发集成分支
- feature/* 分支:新功能开发,完成后合并到 develop
- hotfix/* 分支:紧急修复,从 main 拉取,修复后合并回 main
提交信息规范:
feat: 新功能 | fix: 修复bug | docs: 文档更新
style: 代码格式 | refactor: 重构 | test: 测试
chore: 构建/工具变动
七、解决合并冲突
多人协作时合并冲突是家常便饭。冲突发生时,Git会在文件中标记冲突位置:
<<<<<<< HEAD
你修改的代码
别人修改的代码
>>>>>>> feature/login
解决步骤:
- 打开冲突文件,找到
<<<<<<< 标记
- 决定保留哪部分(或者合并两部分),删掉标记行
- 保存后执行
git add 和 git commit
# 查看哪些文件有冲突
git status
# 用工具辅助解决(推荐)
git mergetool
# 放弃本次合并,回到合并前状态
git merge --abort
# 如果变基过程中出现冲突
git rebase --abort # 放弃变基
git rebase --continue # 解决冲突后继续
小贴士:合并前先用 git fetch 拉取最新代码,在本地先解决完冲突再推送,避免远程直接出冲突。
八、实用进阶命令
Cherry-pick:只取某个提交
当你只需要某个分支上的特定提交,而不是整个分支的修改:
# 把某个提交应用到当前分支
git cherry-pick abc1234
# 应用多个提交
git cherry-pick abc1234 def5678
# 应用一个范围(不包含起始提交)
git cherry-pick abc1234..def5678
Bisect:二分法查找Bug
当不知道哪个提交引入了Bug时,bisect 可以帮你快速定位:
# 启动 bisect
git bisect start
# 标记当前版本有 Bug
git bisect bad
# 标记某个已知没有 Bug 的版本
git bisect good v1.0.0
# Git 会自动切换到中间版本,你测试后告诉它结果
git bisect good # 这个版本没问题
git bisect bad # 这个版本有 Bug
# 重复以上过程,Git 会告诉你哪个提交引入了 Bug
# 最后重置
git bisect reset
配置别名,提高效率
# 在 ~/.gitconfig 中添加
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --all --decorate"
git config --global alias.last "log -1 HEAD"
# 使用后
git st # 等同于 git status
git lg # 等同于漂亮的提交历史图
九、.gitignore 文件
# 常见忽略规则
node_modules/
vendor/
.env
.env.local
*.log
*.bak
.DS_Store
.idea/
.vscode/
dist/
build/
*.swp
Thumbs.db
总结:Git是程序员的基本功,建议把常用命令练习到肌肉记忆。遇到不确定的操作先查文档,不要随便用 --force,尤其是团队共享分支。