文章目录
本地自己的分支为:dev-bing
远程自己的分支为:dev-bing
远程开发分支为:dev
多人协作 Git 完整工作流示例
1. 约定分支策略
-
main(或 master):生产环境稳定代码,只允许合并通过的 PR。
-
dev:团队开发主分支,所有功能分支基于它创建。
-
个人日常开发分支(feature branches):以
feature/xxx
命名(我是dev-bing
),承载个人开发工作。
2. 更新代码
git checkout dev # 切到本地 dev 分支
git pull origin dev # 更新本地 dev 分支 (确保本地dev代码最新)
git checkout dev-bing # 切换到个人日常开发分支:本地 dev-bing 分支
git merge dev # 把本地 dev 分支 合并到 本地 dev-bing 分支(确保本地dev-bing代码最新)
3. 提交代码
# 在本地 dev-bing 分支开发完成后:
git commit -m "feat: 完成 xxx"
git push origin dev-bing # 推送到远程个人分支 dev-bing
# 然后合并到团队主分支:
git checkout dev # 切回主分支 dev
git pull origin dev # 拉取最新远程代码,避免落后
git merge dev-bing # 把 本地 dev-bing 分支合并到 本地 dev 分支
git push origin dev # 推送更新后的主分支代码到远程,供团队共享
🏫4. 完全版(学习用)
# 1. 切换到本地主分支 dev,准备同步远程最新代码
git checkout dev
# -----------------------------------------------------------------------------------
# 切换分支到本地的 dev,dev 是团队主开发分支,基于远程 origin/dev
# 2. 从远程拉取最新的 dev 分支,更新本地 dev
git pull origin dev
# -----------------------------------------------------------------------------------
# 拉取远程 origin 仓库的 dev 分支最新提交,并合并到本地 dev,确保本地 dev 与远程保持同步
# 3. 切换到你自己的功能开发分支 dev-bing
git checkout dev-bing
# -----------------------------------------------------------------------------------
# 切换到你本地的 dev-bing 分支,这是你个人的功能分支,基于 dev 创建
# 4. 将最新的 dev 分支合并到 dev-bing,保证个人分支同步主分支最新改动
git merge dev
# -----------------------------------------------------------------------------------
# 把本地更新后的 dev 分支合并到 dev-bing,解决主分支的新提交和你的代码兼容问题
# 5. (可选)在 dev-bing 分支上完成开发后,提交本地修改
git add .
git commit -m "feat: 完成 xxx 功能"
# -----------------------------------------------------------------------------------
# 暂存所有改动并提交,写清楚提交信息以便团队了解改动内容
# 6. 将本地 dev-bing 分支推送到远程仓库,备份并共享你的开发进度
git push origin dev-bing
# -----------------------------------------------------------------------------------
# 把本地 dev-bing 分支推送到远程 origin 仓库对应的 dev-bing 分支,方便备份及代码审查
# 7. 切换回本地主分支 dev,准备合并个人分支代码
git checkout dev
# -----------------------------------------------------------------------------------
# 切换到本地 dev 分支,准备将你的功能分支代码合入主分支
# 8. 再次拉取远程 dev,确保本地 dev 是最新
git pull origin dev
# -----------------------------------------------------------------------------------
# 以防远程主分支有新提交,先同步更新本地 dev,避免合并冲突
# 9. 将你的个人分支 dev-bing 合并到本地 dev
git merge dev-bing
# -----------------------------------------------------------------------------------
# 把你开发完成并推送的 dev-bing 分支合并到 dev,合入团队主分支的最新代码
# 10. 将更新后的本地 dev 分支推送到远程,完成团队代码更新
git push origin dev
# -----------------------------------------------------------------------------------
# 推送本地合并后的 dev 分支到远程仓库,团队成员即可拉取最新代码
.
🚀5. 简洁版(日常用)
git checkout dev # 切到主分支 dev
git pull origin dev # 拉取远程最新代码,更新本地 dev
git checkout dev-bing # 切回个人开发分支 dev-bing
git merge dev # 合并主分支最新代码到 dev-bing
# --- 开发完成后 ---
git add .
git commit -m "feat: 完成 xxx" # 提交改动
git push origin dev-bing # 推送个人分支到远程备份
git checkout dev # 切回主分支
git pull origin dev # 确保本地 dev 最新
git merge dev-bing # 合并个人分支代码到主分支
# 或:git rebase dev
git push origin dev # 推送更新后的主分支到远程
.
git merge 与 git rebase 区别
-
git merge dev
:把主分支 dev 的最新提交合并到你当前的 dev-bing 分支,会生成一个新的合并提交(merge commit)。提交历史会保留“分叉-合并”的结构。
如果团队协作比较复杂、分支较多,或者不熟悉 rebase,使用 git merge dev 更安全,操作也更直观 -
git rebase dev
:会把你 dev-bing 分支上的提交“移到”最新的 dev 分支后面,线性地重新排列提交历史,没有合并提交,历史更干净整洁。
如果想保持提交历史简单、线性,方便查看
.
⚡️注意
慎用 git pull origin dev
和 git push origin dev-bing:dev
-
git pull origin dev (当前分支是 dev-bing)
- 把远程 origin/dev 拉取下来,自动合并到你当前分支 dev-bing。
- 这相当于直接把远程主分支的代码合并进你的个人开发分支,可能导致不必要的冲突和混乱。
- 本地的 dev 分支可能没有更新,本地分支管理不清晰。
.
git pull origin dev 建议替换成:
git checkout dev git pull origin dev # 先更新本地 dev 分支 git checkout dev-bing git merge dev # 再把更新后的 dev 合并到 dev-bing
这样本地分支结构清晰,便于管理和排查问题。
-
git push origin dev-bing:dev
- 直接把本地 dev-bing 分支推送并覆盖远程 dev 分支。
- 直接推送个人分支代码到远程主分支,跳过代码审核流程,非常危险。
- 可能覆盖他人已合并的提交,导致团队协作混乱。
.
git push origin dev-bing:dev 建议替换成:
git push origin dev-bing # 先推送个人分支 git checkout dev # 切换到dev分支 git pull origin dev # 更新dev分支 git merge dev-bing # 把本地dev-bing合并到本地dev分支 git push origin dev # 推送dev分支
其他
1. git branch 查看分支
命令 | 查看内容 | 包含远程 | 显示 commit | 显示 tracking 关系 | 说明 |
---|---|---|---|---|---|
git branch | 本地分支 | ❌ | ❌ | ❌ | 最简单的本地分支列表 |
git branch -a | 所有分支 | ✅(远程+本地) | ❌ | ❌ | 本地 + 远程分支列表 |
git branch -v | 本地分支 + 最近提交 | ❌ | ✅ | ❌ | 查看本地每个分支最近一次提交 |
git branch -vv (推荐) | 本地分支 + 最近提交 + tracking | ❌ | ✅ | ✅ | 最常用,显示关联远程和状态 |
git branch -r | 远程分支 | ✅(仅远程) | ❌ | ❌ | 只列出远程分支,不包含本地 |
.
2. git fetch origin 拉取最新代码
命令 | 功能 | 细节说明 | 使用建议 |
---|---|---|---|
git fetch origin | 从远程仓库下载最新的所有分支和提交,但不合并到当前分支。 | 只更新远程分支的引用,比如 origin/main ,本地分支不变。 | 安全做法:先用 git fetch 查看远程变更,再决定是否合并 |
git pull | 从远程仓库拉取最新代码并自动合并到当前本地分支。 | 相当于先执行 git fetch ,然后执行 git merge 。 | 快捷做法:直接用 git pull,适合确认远程改动且你准备好合并的情况。 |
.
3. git switch
git switch 和 git checkout 在某些功能上是相似的,尤其是用于切换分支时。但它们不是完全等价,Git 从 2.23 开始推荐使用 git switch 和 git restore 来代替 git checkout,以让命令更清晰、语义更明确。
功能 | git switch | git checkout |
---|---|---|
✅ 切换分支 | ✔️ 推荐使用 | ✔️ 传统方式 |
✅ 创建新分支 | ✔️ -c 参数创建 | ✔️ -b 参数创建 |
❌ 恢复文件 | 🚫 不支持 | ✔️ 支持(但语义不清晰) |
✅ 新手友好性 | 更明确、更安全 | 多功能,容易误操作 |
推荐替代组合
传统 git checkout 功能 | 推荐的新语法 |
---|---|
git checkout branch | git switch branch |
git checkout -b new-branch | git switch -c new-branch |
git checkout file.ts (恢复 file.ts 文件) | git restore file.ts |
git checkout . (恢复所有文件) | git restore . |
为什么推荐用 switch
-
更语义化:switch 就是只管切分支,不会误改文件
-
更安全:不会一不小心还原掉某个文件
-
更清晰:新手不容易混淆“切分支”和“还原文件”的操作
.
4. git stash 临时保存
保存内容
# 把你当前工作目录和暂存区的修改保存起来,恢复到最近一次提交的干净状态
# 修改不会被提交,只是临时藏起来
git stash
# 保存加备注隐藏
git stash save "备注信息"
查看保存的内容
git stash list # 查看所有保存的 stash 条目,格式一般是 stash@{0}, stash@{1} ,如下:
stash@{0}: WIP on dev-1: 1234567 Initial commit
stash@{1}: On dev-1: Another set of changes
恢复保存的内容(取回修改)
# 把最近一次 stash 的修改应用到当前分支
# stash 内容仍保留,可以多次应用
git stash apply
git stash apply stash@{n} # 恢复特定的 stash 条目
# 把最近一次 stash 的修改应用到当前分支
# stash 会从列表中删除(弹出)
git stash pop
git stash pop stash@{n}
删除某条 stash
git stash drop stash@{0}
使用场景示例
当正在修改代码,但突然需要切换分支处理紧急问题:
git stash # 暂存当前修改
git checkout hotfix # 切换分支
# 处理紧急问题后
git checkout dev-bing # 回到之前分支
git stash pop # 恢复之前的修改
.
4. 本地分支关联远程分支
如果 本地分支dev-bing 想要与 远程分支dev-bing 联立追踪关系,可以使用
命令 | 建立 tracking | 推送代码 | 说明 | 如果远程没有dev-bing分支 |
---|---|---|---|---|
git branch --set-upstream-to=origin/dev-bing dev-bing | ✅ 是 | ❌ 否 | 仅建立追踪关系,不会推送代码 | 会报错,不会创建该分支 |
git push --set-upstream origin dev-bing 简写: git push -u origin dev-bing | ✅ 是 | ✅ 是 | 建立追踪关系 + 推送代码 | 会创建该分支 |
建立追踪关系后,以后就可以直接用 git push
和 git pull
而不需要每次都加远程和分支名
.
5. git merge 合并本地分支
git merge 和 git push 是 Git 中两个非常常用但作用完全不同的命令
命令 | 用于 | 作用对象 | 简单理解 |
---|---|---|---|
git merge | 本地 | 本地合并分支 | 把 两个本地分支的内容合并在一起, 不会和远程交互(完全是本地操作) |
git push | 本地 → 远程 | 推送分支到远程仓库 | 把 本地分支的代码推送到远程仓库 |
# 1. 切到 本地 dev 分支
git checkout dev
# 2. 把本地 dev-bing 分支合并到 当前 dev 分支上(即:把 dev-bing 的改动合并进 dev)
git merge dev-bing
# 3. 推送合并后的结果到远程dev分支
git push origin dev