Git 的正确使用姿势与最佳实践
Git 是一款强大的版本控制系统,对于团队协作和版本管理非常重要。下面是一些 Git 的最佳实践和正确使用姿势的笔记,供参考。
分支管理
- 主分支保持稳定:
master(或main)分支应该保持稳定,只用于发布稳定版本,避免直接在此分支上进行开发。 - 特性分支: 每个新功能或修复应该在独立的分支上进行开发。创建一个新的分支,并在完成后合并回主分支。
- 分支命名规范: 分支名最好使用有意义的名称,例如
feature/add-user-auth或bugfix/fix-login-issue。 - 定期合并: 保持特性分支与主分支同步,定期合并主分支的变更到特性分支,避免长时间开发后才合并,减少冲突。
# 创建特性分支
git checkout -b feature/add-user-auth
# 合并主分支到特性分支
git checkout feature/add-user-auth git merge master
提交信息
- 清晰简洁: 提交信息应该清晰地描述做了什么修改,避免含糊不清的描述。
- 分开关注点: 如果一个提交包含多个不同的更改,最好拆分成多个独立的提交,每个提交关注一个特定的修改。
- 使用动词: 使用有意义的动词来描述提交的操作,例如
fix,add,update等。 - 避免绝对路径: 避免在提交信息中包含绝对路径或与个人相关的信息,保持提交信息的通用性。
# 提交更改
git add file1.txt file2.txt
git commit -m "fix: resolve login issue"
远程仓库
- 团队协作: 使用远程仓库进行团队协作,例如使用 GitHub,GitLab 或 Bitbucket。
- Pull Requests: 对于主分支的修改,使用 Pull Requests 或 Merge Requests 进行代码评审,确保代码质量和一致性。
- 保护分支: 保护主分支,确保只有经过代码审查并且测试通过的代码才能合并
# 推送代码到远程仓库
git push origin feature/add-user-auth
常用命令
- 拉取代码: 使用
git pull命令获取远程仓库的最新代码。 - 查看状态: 使用
git status命令查看当前工作目录的状态,了解文件修改情况。 - 分支操作: 使用
git branch创建、删除和查看分支,使用git checkout切换分支。 - 合并分支: 使用
git merge合并特性分支到主分支。 - 解决冲突: 在合并分支时,如果发生冲突,使用编辑器解决冲突,然后再次提交。
- 提交日志: 使用
git log查看提交日志,了解项目的修改历史。
忽略文件
- 创建
.gitignore: 在项目根目录下创建.gitignore文件,列出不需要纳入版本控制的文件和目录。 - 忽略规则: 确保
.gitignore中包含编辑器生成的文件、依赖库、编译输出等。
# .gitignore 示例
node_modules/
build/
.vscode/
版本标签
添加标签: 对于发布的稳定版本或重要的里程碑,可以添加标签来标识版本号。
# 添加标签
git tag v1.0.0
推送标签: 确保推送标签到远程仓库,方便团队成员查看和使用。
# 推送标签到远程仓库
git push origin v1.0.0
处理敏感信息
- 密钥和密码: 不要将敏感信息如 API 密钥和密码直接提交到版本控制系统中。使用环境变量或专门的配置文件来管理敏感信息。
- 加密: 对于包含敏感信息的文件,可以使用加密工具进行加密保护,并确保只有授权的团队成员能够解密和访问。
保持仓库整洁
合并历史: 在合并分支时,避免使用 --no-ff 参数,这样可以保持版本历史的清晰,更容易追溯和理解项目的发展。
# 合并分支并保持历史记录清晰
git merge --no-ff feature/awesome-feature
删除分支: 合并完成的特性分支可以删除,保持仓库的分支结构整洁。
# 删除本地分支
git branch -d feature/add-user-auth
# 删除远程分支
git push --delete origin feature/add-user-auth
使用 Rebase 替代 Merge
- Rebase 优势: 使用
git rebase可以将一个分支的提交移动到另一个分支的末尾,这样可以保持提交历史的线性和整洁。 - Rebase vs. Merge: 在特性分支开发完成后,使用
git rebase将主分支的最新代码合并到特性分支,并解决可能出现的冲突,然后再将特性分支合并回主分支。
# 切换到特性分支
git checkout feature/add-user-auth
# 将主分支最新代码合并到特性分支
git rebase master
# 解决冲突(如果有)
# git add <conflicting-files>
# git rebase --continue
# 将特性分支合并回主分支
git checkout master
git merge feature/add-user-auth
Git 高级特性
- 交互式 Rebase: 使用
git rebase -i可以进行交互式 rebase,对提交进行编辑、合并或重新排列。 - 重置: 使用
git reset可以撤销提交并将 HEAD 移动到指定的提交,慎用此功能,避免对已发布代码造成影响。 - Cherry-pick: 使用
git cherry-pick可以选择性地将一个或多个提交从一个分支复制到另一个分支。