前言
在实习后的团队协作中,对 Git 的熟练度要求比自己做小玩具时高很多。在实际操作中,我发现自己对 Git 的认识还有模糊不清的地方,同时也学到了一些便捷的操作。于是我借助 AI 进行总结,并结合个人体会整理成了这篇笔记。
协作流程全景图
一个成员从拿到需求到提交的基本流程:
- 同步主分支最新代码
- 创建功能分支
- 在功能分支上开发和提交
- 推送到远程仓库
- 发起 Pull Request / Merge Request
- 代码 review 与修改
- 合并并清理分支
1. 同步主分支最新代码
开始任何新工作前,都要确保本地的主分支(默认如 main 或 master)与远程完全同步。
# 切换到主分支
git switch main
# 或
git checkout main
# 拉取远程主分支的最新提交,并合并到本地
git pull origin main
# 若设置了远程可以直接
git pull更推荐的做法:使用 fetch + merge 分步操作,以便在合并前了解远程变化。
git fetch origin # 下载远程的更新,但不合并
git log main..origin/main # 查看远程比本地多了哪些提交
git merge origin/main # 确认无误后再合并为什么要先同步? 基于旧版本创建分支,最终合并时冲突会非常多,也容易引入已经修复的 bug。
2. 创建功能分支
永远不要在主分支上直接修改代码。为每个需求、每个修复都新建一个独立分支。
git checkout -b feature/add-cart
# 或者使用较新的命令
git switch -c feature/add-cart分支命名约定 按团队规范
3. 在功能分支上开发与提交
开发过程中的日常操作
# 查看当前状态
git status
# 将修改加入暂存区
git add file1.py file2.py
# 或分块精确暂存
git add -p
# 提交到本地仓库
git commit -m "..."提交信息规范 同样按团队开发规范
同步上游变更
由于开发需要时间,期间主分支可能已经有了新提交。需要 定期将主分支的更新合并到你的功能分支。
# 1. 先拉取远程最新状态
git fetch origin
# 2. 将 main 的最新内容合并进当前分支
git merge origin/main如果出现冲突,就在当前分支解决(而不是等到 PR 阶段),减少延迟痛苦。解决冲突的方法:
- 打开冲突文件,编辑掉
<<<<<<<、=======、>>>>>>>标记,保留正确代码。 git add <已解决的文件>git commit完成合并。
临时任务切换:使用 stash
需要暂存代码时,使用 git stash 可以将当前尚未提交的修改(工作区和暂存区)暂时保存起来,并将工作区恢复到干净的未修改状态。
git stash -u # 暂存所有修改(包括未跟踪文件)
# 进行你需要的操作
git ...
git stash pop # 完成后恢复之前的工作现场4. 推送到远程仓库
完成功能开发、本地测试通过后,将分支推送到远端,以便发起代码评审。
如果是第一次推送该分支,Git 会提示设置上游分支,可使用 -u 参数建立追踪:
git push -u origin feature/add-cart建立追踪后,后续的推送可以直接使用简单的命令:
git push5. 发起 Pull Request (或 Merge Request)
这一步通常在 Git 托管平台(GitHub、GitLab 等)的 Web 界面上直接操作:
大概流程如:
- 选择源分支(
feature/add-cart)和目标分支(main) - 以一定格式填写标题和描述
- 指定评审人
6. 代码评审与追加修改
评审者会在 PR 中留下意见(譬如使用 comment )。你需要根据反馈修改代码,然后在同一个分支上追加提交。
# 继续在 feature/add-cart 分支上修改
git add .
git commit -m "..."
git push提交历史整理修改: 强力的 git rebase
git rebase 是 Git 中强大又令人敬畏的命令, 它将会重新编排历史, 永远不要对已经推送到公共仓库、可能有其他人基于其工作的提交进行变基!
在你需要整理历史信息或修改较久之前的提交信息时将会用到它, 具体可以自行搜索
(如果你只是想要修改上一条提交信息可以使用 git commit --amend 命令)
git rebase -i 默认会打开 Git 配置中指定的编辑器, 当你没有进行配置时, 将会回退到 vim
请搜索对应编辑器规则并进行正确操作
7. 合并代码与清理分支
CI 自动化检查通过且评审也通过后,就可以合并到主分支。这一步通常由维护者操作
git 中还有很多实用的命令, 需要时再去搜索吧
