Git 正确使用指南:系统性结构化总结
一、核心概念
理解 Git 的核心概念是正确使用的基础:
- 仓库(Repository):包含项目完整历史记录的目录,分为本地仓库(在你的电脑上)和远程仓库(在服务器上,如 GitHub、GitLab)。
- 工作区(Working Directory):你实际编辑的文件目录。
- 暂存区(Staging Area):临时保存即将提交的修改的区域(类似“购物车”)。
- 提交(Commit):将暂存区的修改永久保存到仓库的历史记录中,每个提交有唯一的哈希值。
- 分支(Branch):独立的开发线,默认分支通常为
main或master。
二、安装与配置
1. 安装
- Windows:下载 Git for Windows 安装包。
- macOS:使用 Homebrew 安装:
brew install git。 - Linux(Ubuntu/Debian):
sudo apt install git。
2. 基础配置
配置用户信息(全局生效):
git config --global user.name "你的名字"
git config --global user.email "你的邮箱@example.com"
其他常用配置:
- 设置默认编辑器:
git config --global core.editor vim - 查看配置:
git config --list
三、基本工作流程(本地仓库)
1. 初始化/克隆仓库
- 初始化新仓库:在项目目录下运行
git init。 - 克隆远程仓库:
git clone <远程仓库URL>(如git clone https://github.com/username/repo.git)。
2. 查看状态与差异
git status:查看工作区、暂存区的状态(哪些文件被修改、暂存)。git diff:查看工作区与暂存区的差异。git diff --staged:查看暂存区与最后一次提交的差异。
3. 暂存与提交
git add <文件>:将文件添加到暂存区(如git add .暂存所有修改)。git commit -m "提交信息":将暂存区的修改提交到仓库,提交信息需清晰描述修改内容。
4. 查看提交历史
git log:查看提交历史(按时间倒序)。git log --oneline:简洁显示提交历史(每个提交一行)。
5. 撤销操作
- 取消暂存:
git restore --staged <文件>(将文件从暂存区移回工作区)。 - 丢弃工作区修改:
git restore <文件>(谨慎使用,会丢失未暂存的修改)。 - 修改最后一次提交:
git commit --amend(修改提交信息或补充遗漏的文件)。
四、分支管理
1. 基本分支操作
git branch:查看所有分支(当前分支前有*标记)。git branch <分支名>:创建新分支(如git branch dev)。git switch <分支名>:切换到指定分支(或旧命令git checkout <分支名>)。git switch -c <分支名>:创建并切换到新分支(一步完成)。
2. 合并分支
git merge <分支名>:将指定分支合并到当前分支(如在main分支运行git merge dev)。- 解决冲突:如果合并时出现冲突,Git 会标记冲突文件,需手动编辑文件解决冲突,然后
git add和git commit完成合并。
3. 删除分支
git branch -d <分支名>:删除已合并的分支。git branch -D <分支名>:强制删除未合并的分支(谨慎使用)。
4. 变基(Rebase)
git rebase <目标分支>:将当前分支的提交“移动”到目标分支的顶部,保持提交历史线性(如git rebase main)。- 注意:不要对已推送到远程仓库的公共分支使用变基!
五、远程仓库与协作
1. 关联远程仓库
git remote add origin <远程仓库URL>:将本地仓库与远程仓库关联(origin是远程仓库的默认名称)。git remote -v:查看关联的远程仓库。
2. 推送与拉取
git push -u origin <分支名>:将本地分支推送到远程仓库(-u关联本地与远程分支,后续可直接git push)。git pull:拉取远程仓库的最新修改并合并到当前分支(等价于git fetch+git merge)。git fetch:获取远程仓库的最新修改但不自动合并。
3. 协作流程(Fork + PR)
- Fork 仓库:在 GitHub/GitLab 上 Fork 他人的仓库到自己的账号。
- 克隆自己的 Fork:
git clone <你的Fork仓库URL>。 - 创建分支开发:
git switch -c feature-xxx。 - 提交并推送:
git add .→git commit -m "feat: 添加xxx功能"→git push origin feature-xxx。 - 提交 Pull Request (PR):在 GitHub/GitLab 上提交 PR,等待原仓库维护者审查合并。
六、常见问题与最佳实践
1. .gitignore 文件
创建 .gitignore 文件,指定不需要提交的文件(如依赖目录、日志文件、临时文件):
node_modules/
*.log
.DS_Store
2. 提交信息规范
使用清晰的提交信息格式(参考 Conventional Commits):
feat: 新功能fix: 修复bugdocs: 文档更新style: 代码格式调整refactor: 重构
3. 恢复丢失的提交
如果误删了提交,使用 git reflog 查看操作历史,找到丢失的提交哈希值,然后:
git checkout <哈希值>:临时查看该提交。git reset --hard <哈希值>:恢复到该提交(谨慎使用,会丢失后续修改)。
4. 最佳实践
- 频繁提交:小步提交,每个提交对应一个独立的功能或修复。
- 分支开发:在分支上开发新功能,完成后合并到主分支,保持主分支稳定。
- 代码审查:通过 PR 进行代码审查,提高代码质量。
- 定期同步:定期从远程仓库拉取最新修改,避免冲突。