原始笔记
Git & GitHub 团队协作最佳实践 - 大纲
目录结构
- Git & GitHub 团队协作最佳实践
- 1. 每日开始开发的标准流程
- 步骤一:更新本地代码
- 切换到主分支
- 拉取远程最新代码
- 步骤二:创建功能分支
- 创建并切换到新分支
- 或者分两步
- 步骤三:开始开发前检查
- 查看当前分支状态
- 查看当前分支
- 2. 分支管理
- 常用命令
- 查看所有本地分支
- 查看所有分支(含远程)
- 切换分支
- 创建并切换
- 删除本地分支(已合并)
- 强制删除本地分支
- 删除远程分支
- 最佳实践
- 3. 代码提交
- git add — 暂存更改
- 暂存指定文件
- 暂存多个文件
- 暂存所有更改
- 交互式暂存(选择部分更改)
- git commit — 提交更改
- 提交暂存的更改
- 提交并显示差异
- 修改上一次提交信息
- 查看提交历史
- 查看提交历史
- 简洁模式
- 图形化显示分支历史
- 4. 合并与变基
- git merge — 合并分支
- 将 feature 分支合并到当前分支
- 合并时禁止快进(保留分支历史)
- git rebase — 变基
- 将当前分支变基到 main
- 交互式变基(可合并、编辑提交)
- Merge vs Rebase
- 5. 冲突处理
- 冲突产生场景
- 解决冲突流程
- 1. 尝试合并/变基
- 或
- 2. 查看冲突文件
- 3. 打开冲突文件,手动编辑
- 冲突标记格式:
- <<<<<<< HEAD
- 当前分支的内容
- =======
- 要合并分支的内容
- >>>>>>> feature/xxx
- 4. 解决冲突后,暂存文件
- 5. 完成合并
- 或
- 6. 如果想放弃合并
- 或
- 使用工具解决冲突
- 使用可视化工具
- 预防冲突的最佳实践
- 6. 推送代码
- 基本推送
- 推送到远程(已关联分支)
- 推送到远程并建立追踪关系
- 强制推送(危险操作,慎用)
- 首次推送 vs 后续推送
- 首次推送新分支
- 后续推送(已建立追踪)
- 推送失败常见原因
- 原因1:远程有新提交
- 解决:先拉取再推送
- 原因2:分支不存在于远程
- 解决:使用 -u 参数
- 原因3:无推送权限
- 解决:检查仓库权限设置
- 7. 完整工作流示例
- 生成密钥
- 用户名配置
- 把当前分支重置为和main分支一模一样
- 场景:开发新功能
- ========== Day 1:开始开发 ==========
- 1. 更新本地代码
- 2. 创建功能分支
- 3. 开发并提交
- 4. 推送到远程
- ========== Day 2:继续开发 ==========
- 1. 继续开发(在功能分支上)
- ... 修改代码 ...
- 2. 提交
- 3. 推送
- ========== Day 3:同步主分支最新代码 ==========
- 1. 切换到 main 并更新
- 2. 切回功能分支并变基
- 3. 如果有冲突,解决后继续
- 4. 强制推送(因为变基改写了历史)
- ========== 功能完成:合并到 main ==========
- 1. 切换到 main
- 2. 合并功能分支
- 3. 推送 main
- 4. 删除已合并的功能分支
- 快速参考卡
- 常见问题速查
- Q1: 撤销未提交的更改?
- 撤销工作区更改(未 add)
- 撤销暂存区更改(已 add,未 commit)
- 撤销最近一次提交(保留更改)
- Q2: 提交错了分支?
- 撤销提交,保留更改
- 切换到正确分支
- 重新提交
- Q3: 合并后想回退或撤销一串已提交代码?
- 1. 查看当前工作区,确认没有未提交改动
- 2. 创建回滚前备份分支
- 3. 查看提交历史,确认要回滚的 commit 区间
- 4. 回滚从 oldest 到 newest 的整段提交,但先不自动提交
- 5. 检查回滚产生的文件改动和冲突状态
- 6. 确认无误后提交回滚结果
- 1. 手动解决冲突后暂存
- 2. 继续完成 revert
- 取消本次 revert,恢复到 revert 前状态
- 回退到指定提交,并丢弃之后的本地改动(危险)
- 如果确实必须改写远程历史,优先使用 --force-with-lease
- Q4: 如何暂存当前工作?
- 暂存当前工作
- 查看暂存列表
- 恢复暂存
- 恢复指定暂存