Original Note

Git & GitHub 团队协作最佳实践 - Outline

Outline

  1. Git & GitHub 团队协作最佳实践
  2. 1. 每日开始开发的标准流程
  3. 步骤一:更新本地代码
  4. 切换到主分支
  5. 拉取远程最新代码
  6. 步骤二:创建功能分支
  7. 创建并切换到新分支
  8. 或者分两步
  9. 步骤三:开始开发前检查
  10. 查看当前分支状态
  11. 查看当前分支
  12. 2. 分支管理
  13. 常用命令
  14. 查看所有本地分支
  15. 查看所有分支(含远程)
  16. 切换分支
  17. 创建并切换
  18. 删除本地分支(已合并)
  19. 强制删除本地分支
  20. 删除远程分支
  21. 最佳实践
  22. 3. 代码提交
  23. git add — 暂存更改
  24. 暂存指定文件
  25. 暂存多个文件
  26. 暂存所有更改
  27. 交互式暂存(选择部分更改)
  28. git commit — 提交更改
  29. 提交暂存的更改
  30. 提交并显示差异
  31. 修改上一次提交信息
  32. 查看提交历史
  33. 查看提交历史
  34. 简洁模式
  35. 图形化显示分支历史
  36. 4. 合并与变基
  37. git merge — 合并分支
  38. 将 feature 分支合并到当前分支
  39. 合并时禁止快进(保留分支历史)
  40. git rebase — 变基
  41. 将当前分支变基到 main
  42. 交互式变基(可合并、编辑提交)
  43. Merge vs Rebase
  44. 5. 冲突处理
  45. 冲突产生场景
  46. 解决冲突流程
  47. 1. 尝试合并/变基
  48. 2. 查看冲突文件
  49. 3. 打开冲突文件,手动编辑
  50. 冲突标记格式:
  51. <<<<<<< HEAD
  52. 当前分支的内容
  53. =======
  54. 要合并分支的内容
  55. >>>>>>> feature/xxx
  56. 4. 解决冲突后,暂存文件
  57. 5. 完成合并
  58. 6. 如果想放弃合并
  59. 使用工具解决冲突
  60. 使用可视化工具
  61. 预防冲突的最佳实践
  62. 6. 推送代码
  63. 基本推送
  64. 推送到远程(已关联分支)
  65. 推送到远程并建立追踪关系
  66. 强制推送(危险操作,慎用)
  67. 首次推送 vs 后续推送
  68. 首次推送新分支
  69. 后续推送(已建立追踪)
  70. 推送失败常见原因
  71. 原因1:远程有新提交
  72. 解决:先拉取再推送
  73. 原因2:分支不存在于远程
  74. 解决:使用 -u 参数
  75. 原因3:无推送权限
  76. 解决:检查仓库权限设置
  77. 7. 完整工作流示例
  78. 生成密钥
  79. 用户名配置
  80. 把当前分支重置为和main分支一模一样
  81. 场景:开发新功能
  82. ========== Day 1:开始开发 ==========
  83. 1. 更新本地代码
  84. 2. 创建功能分支
  85. 3. 开发并提交
  86. 4. 推送到远程
  87. ========== Day 2:继续开发 ==========
  88. 1. 继续开发(在功能分支上)
  89. ... 修改代码 ...
  90. 2. 提交
  91. 3. 推送
  92. ========== Day 3:同步主分支最新代码 ==========
  93. 1. 切换到 main 并更新
  94. 2. 切回功能分支并变基
  95. 3. 如果有冲突,解决后继续
  96. 4. 强制推送(因为变基改写了历史)
  97. ========== 功能完成:合并到 main ==========
  98. 1. 切换到 main
  99. 2. 合并功能分支
  100. 3. 推送 main
  101. 4. 删除已合并的功能分支
  102. 快速参考卡
  103. 常见问题速查
  104. Q1: 撤销未提交的更改?
  105. 撤销工作区更改(未 add)
  106. 撤销暂存区更改(已 add,未 commit)
  107. 撤销最近一次提交(保留更改)
  108. Q2: 提交错了分支?
  109. 撤销提交,保留更改
  110. 切换到正确分支
  111. 重新提交
  112. Q3: 合并后想回退或撤销一串已提交代码?
  113. 1. 查看当前工作区,确认没有未提交改动
  114. 2. 创建回滚前备份分支
  115. 3. 查看提交历史,确认要回滚的 commit 区间
  116. 4. 回滚从 oldest 到 newest 的整段提交,但先不自动提交
  117. 5. 检查回滚产生的文件改动和冲突状态
  118. 6. 确认无误后提交回滚结果
  119. 1. 手动解决冲突后暂存
  120. 2. 继续完成 revert
  121. 取消本次 revert,恢复到 revert 前状态
  122. 回退到指定提交,并丢弃之后的本地改动(危险)
  123. 如果确实必须改写远程历史,优先使用 --force-with-lease
  124. Q4: 如何暂存当前工作?
  125. 暂存当前工作
  126. 查看暂存列表
  127. 恢复暂存
  128. 恢复指定暂存