# Git 使用指南 ## 基础概念 Git 是一个分布式版本控制系统,用于跟踪代码变更历史。 ### 核心概念 - **仓库 (Repository)**: 存储项目所有文件和历史记录的地方 - **工作区 (Working Directory)**: 当前正在编辑的文件 - **暂存区 (Staging Area)**: 准备提交的文件暂存地 - **提交 (Commit)**: 保存项目快照的操作 ## 基础配置 ```bash # 配置用户信息 git config --global user.name "你的名字" git config --global user.email "你的邮箱" # 查看配置 git config --list ``` ## 常用命令 ### 初始化和克隆 ```bash # 初始化新仓库 git init # 克隆远程仓库 git clone <仓库地址> ``` ### 文件操作 ```bash # 查看状态 git status # 添加文件到暂存区 git add <文件名> # 添加单个文件 git add . # 添加所有文件 git add -A # 添加所有变更(包括删除) # 提交变更 git commit -m "提交信息" # 查看变更差异 git diff # 工作区与暂存区的差异 git diff --staged # 暂存区与最后提交的差异 ``` ### 历史查看 ```bash # 查看提交历史 git log git log --oneline # 简洁格式 git log --graph # 图形化显示 # 查看文件变更历史 git log -p <文件名> ``` ### 分支操作 ```bash # 查看分支 git branch # 本地分支 git branch -r # 远程分支 git branch -a # 所有分支 # 创建分支 git branch <分支名> # 切换分支 git checkout <分支名> git switch <分支名> # Git 2.23+ 新命令 # 创建并切换分支 git checkout -b <分支名> git switch -c <分支名> # 删除分支 git branch -d <分支名> # 安全删除 git branch -D <分支名> # 强制删除 ``` ### 合并操作 ```bash # 合并分支 git merge <分支名> # 变基操作 git rebase <分支名> ``` ### 远程仓库 ```bash # 查看远程仓库 git remote -v # 添加远程仓库 git remote add origin <仓库地址> # 推送到远程 git push origin <分支名> git push -u origin <分支名> # 首次推送并设置上游 # 拉取远程变更 git pull origin <分支名> git fetch origin # 只获取不合并 ``` ### 撤销操作 ```bash # 撤销工作区变更 git checkout -- <文件名> git restore <文件名> # Git 2.23+ 新命令 # 撤销暂存区变更 git reset HEAD <文件名> git restore --staged <文件名> # 撤销提交 git reset --soft HEAD~1 # 保留变更在暂存区 git reset --mixed HEAD~1 # 保留变更在工作区 git reset --hard HEAD~1 # 完全撤销变更 # 创建反向提交 git revert <提交ID> ``` ## 进阶技巧 ### 标签管理 ```bash # 创建标签 git tag <标签名> git tag -a <标签名> -m "标签说明" # 查看标签 git tag # 推送标签 git push origin <标签名> git push origin --tags ``` ### 暂存变更 ```bash # 暂存当前变更 git stash # 查看暂存列表 git stash list # 应用暂存变更 git stash apply # 应用最新暂存 git stash pop # 应用并删除最新暂存 git stash apply stash@{n} # 应用指定暂存 # 删除暂存 git stash drop git stash clear # 清空所有暂存 ``` ### 重写历史 ```bash # 交互式变基 git rebase -i HEAD~n # 修改最近n个提交 # 修改最后一次提交 git commit --amend # 压缩提交 git rebase -i HEAD~n # 使用squash命令 ``` ## 工作流程建议 ### 基本工作流 1. `git status` - 检查当前状态 2. `git add` - 添加变更到暂存区 3. `git commit` - 提交变更 4. `git push` - 推送到远程仓库 ### 功能开发流程 1. `git checkout -b feature/新功能` - 创建功能分支 2. 开发和提交变更 3. `git checkout main` - 切换到主分支 4. `git merge feature/新功能` - 合并功能分支 5. `git branch -d feature/新功能` - 删除功能分支 ## 最佳实践 1. **频繁提交**: 小步快跑,经常提交变更 2. **清晰的提交信息**: 使用描述性的提交信息 3. **使用分支**: 为每个功能或修复创建分支 4. **保持主分支稳定**: 不要直接在主分支上开发 5. **定期同步**: 经常拉取远程变更 6. **审查变更**: 提交前检查变更内容 ## 常见问题解决 ### 合并冲突 ```bash # 查看冲突文件 git status # 手动解决冲突后 git add <冲突文件> git commit ``` ### 忘记切换分支 ```bash # 将变更移到新分支 git stash git checkout -b <新分支> git stash pop ``` ### 误删文件 ```bash # 恢复已删除的文件 git checkout HEAD -- <文件名> ``` ## 有用的别名配置 ```bash 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.unstage 'reset HEAD --' git config --global alias.last 'log -1 HEAD' git config --global alias.visual '!gitk' ``` 这样就可以使用 `git st` 代替 `git status` 等。