两种完整的 Git 分支协作流程:「本地新建仓库推送到远程」和「克隆远程仓库开发分支」,覆盖从分支创建、开发、推送、合并到清理的全环节,每个步骤都附带可执行命令和场景说明,新手可直接照做。
前置准备
-
已配置 Git 用户名 / 邮箱(
git config --global user.name/email); -
已在 GitHub 上创建空仓库(如
https://github.com/你的账号/test-repo.git); -
理解核心分支规范:
main(主分支,生产环境)、dev(开发分支,日常开发)、feature/*(功能分支,单个功能)。
一、流程一:本地新建仓库 → 推送到远程(分支版)
适用于「本地先写代码,后关联远程仓库」的场景,全程按分支规范操作。
步骤 1:本地初始化仓库并创建主分支
运行
# 1. 创建本地项目文件夹并进入
mkdir test-repo && cd test-repo
# 2. 初始化 Git 仓库(默认创建 main 分支)
git init
# 3. 新增初始文件(如 README.md),完成首次提交(main 分支)
echo "# 测试仓库" > README.md
git add .
git commit -m "main: 初始化仓库,添加 README"
步骤 2:创建开发分支 dev(核心协作分支)
运行
# 1. 创建并切换到 dev 分支(从 main 分支派生)
git switch -c dev # 等价于 git checkout -b dev
# 2. 在 dev 分支新增开发文件,提交(模拟基础开发)
echo "开发分支初始化" > dev-note.md
git add .
git commit -m "dev: 初始化开发分支,添加开发笔记"
步骤 3:关联远程仓库并推送主分支 + 开发分支
运行
# 1. 关联 GitHub 远程仓库(别名 origin)
git remote add origin https://github.com/你的账号/test-repo.git
# 2. 推送 main 分支到远程(首次推送加 -u 建立关联)
git push -u origin main
# 3. 推送 dev 分支到远程(建立关联,后续可直接 git push)
git push -u origin dev
步骤 4:创建功能分支开发(核心:隔离开发)
运行
# 1. 从 dev 分支创建功能分支(如开发登录功能)
git switch -c feature/login dev
# 2. 在功能分支开发代码,多次提交
echo "登录接口代码" > login.py
git add .
git commit -m "feature/login: 新增登录接口基础逻辑"
# 3. 继续开发,补充提交(模拟迭代)
echo "添加手机号验证" >> login.py
git add .
git commit -m "feature/login: 完善登录接口,添加手机号验证"
步骤 5:推送功能分支到远程(协作 / 备份)
运行
# 推送 feature/login 到远程,建立关联
git push -u origin feature/login
步骤 6:合并功能分支到 dev(功能完成)
运行
# 1. 切回 dev 分支,拉取远程最新 dev 代码(避免冲突)
git switch dev
git pull origin dev # 多人协作时必做,同步他人修改
# 2. 合并 feature/login 到 dev 分支
git merge feature/login -m "dev: 合并登录功能分支"
# 3. 推送合并后的 dev 分支到远程
git push origin dev
步骤 7:合并 dev 到 main(功能上线)
运行
# 1. 切回 main 分支,拉取远程最新 main 代码
git switch main
git pull origin main
# 2. 合并 dev 分支到 main(仅功能测试通过后执行)
git merge dev -m "main: 合并 dev 分支,上线登录功能"
# 3. 推送 main 分支到远程(生产环境更新)
git push origin main
步骤 8:清理无用分支(本地 + 远程)
运行
# 1. 删除本地 feature/login 分支(已合并,-d 安全删除)
git branch -d feature/login
# 2. 删除远程 feature/login 分支(清理远程冗余)
git push origin --delete feature/login
# (可选)若 dev 分支需长期维护,无需删除;仅清理功能分支
二、流程二:克隆远程仓库 → 开发分支(更常用)
适用于「先克隆远程空仓库,再按分支开发」的场景(团队协作主流方式)。
步骤 1:克隆远程仓库到本地
运行
# 克隆远程仓库(自动关联 origin,默认拉取 main 分支)
git clone https://github.com/你的账号/test-repo.git
cd test-repo
步骤 2:创建并推送 dev 分支到远程(初始化开发分支)
运行
# 1. 从 main 分支创建 dev 分支并切换
git switch -c dev
# 2. 推送 dev 分支到远程(让团队共享开发分支)
git push -u origin dev
步骤 3:拉取远程 dev 分支(多人协作时)
如果是团队成员,克隆仓库后需先拉取远程 dev 分支:
运行
# 1. 拉取远程所有分支信息(更新本地缓存)
git fetch origin
# 2. 创建并切换到本地 dev 分支,关联远程 dev
git switch -c dev origin/dev
步骤 4:创建功能分支开发(和流程一一致)
运行
# 从 dev 分支创建 feature/pay 分支(开发支付功能)
git switch -c feature/pay dev
# 开发+提交
echo "支付接口代码" > pay.py
git add .
git commit -m "feature/pay: 新增支付接口"
# 推送功能分支到远程(供同事审核/协作)
git push -u origin feature/pay
步骤 5:通过 Pull Request(PR)合并分支(GitHub 网页版)
团队协作中,不建议本地直接合并,优先用 GitHub PR 规范合并:
-
打开 GitHub 仓库页面 → 点击「Pull requests」→「New pull request」;
-
「base: dev」(目标分支)→「compare: feature/pay」(待合并分支);
-
填写 PR 描述(如「支付功能开发完成,包含微信 / 支付宝接口」);
-
审核通过后,点击「Merge pull request」合并到 dev 分支;
-
本地拉取合并后的 dev 代码: 运行
git switch dev git pull origin dev
步骤 6:合并 dev 到 main(上线)+ 清理分支
运行
# 1. 切回 main 分支,拉取最新代码
git switch main
git pull origin main
# 2. 合并 dev 到 main
git merge dev -m "main: 上线支付功能"
git push origin main
# 3. 清理分支
git branch -d feature/pay # 本地删除
git push origin --delete feature/pay # 远程删除
核心补充:分支操作关键命令速查
| 操作 | 命令 |
|---|---|
| 查看所有分支 | git branch -a(本地 + 远程) |
| 切换分支 | git switch 分支名(git 2.23+) |
| 创建并切换分支 | git switch -c 新分支名 基准分支 |
| 拉取远程分支到本地 | git switch -c 本地分支名 origin/远程分支名 |
| 合并分支 | git merge 待合并分支 -m "合并备注" |
| 删除本地分支 | git branch -d 分支名(已合并)/ -D(强制) |
| 删除远程分支 | git push origin --delete 分支名 |
流程总结(核心原则)
-
分支隔离 :永远不在
main分支直接开发,功能都在feature/*分支开发; -
合并规范 :
feature/* → dev → main,逐级合并,避免跨级直接合到 main; -
推送前拉取 :合并 / 推送前必执行
git pull,同步远程最新代码,减少冲突; -
及时清理:功能合并后立即删除本地 / 远程功能分支,避免分支泛滥;
-
备注规范 :提交备注带分支前缀(如
feature/login: 修复XX Bug),便于追溯。
三、安全合并远程修改(推荐,无数据丢失)
步骤 1: 拉取远程 vip/zs 分支的最新代码并合并
运行
# 拉取远程 vip 仓库的 zs 分支到本地,并自动合并
git pull vip zs --allow-unrelated-histories
# 补充:--allow-unrelated-histories 是为了防止「本地和远程 zs 分支无公共提交历史」导致的合并失败
-
无冲突情况:Git 会自动创建「合并提交」,把远程和本地的内容整合,输出类似:
Merge made by the 'recursive' strategy. -
有冲突情况 :Git 会提示
Automatic merge failed; fix conflicts and then commit the result.,解决冲突步骤:-
执行
git status查看冲突文件(标记为both modified); -
打开冲突文件,删除 Git 标记的
<<<<<<</=======/>>>>>>,手动保留需要的内容; -
提交解决后的代码:
git add 冲突文件名 git commit -m "合并远程vip/zs分支,解决XX文件冲突"
-
步骤 2: 重新推送本地 zs 分支到远程 vip
合并完成后,本地 zs 分支就包含了远程的所有提交,此时推送会成功:
运行
git push -u vip zs
强制推送(谨慎,会覆盖远程代码)
如果你确认远程 vip/zs 分支的「新提交」是无用的(比如是误提交、测试内容),且你有权覆盖远程内容(该仓库仅你使用),可执行强制推送(会丢失远程 zs 分支中你本地没有的提交,团队仓库绝对禁止使用!):
运行
# 强制推送本地 zs 分支覆盖远程 vip/zs 分支
git push -f -u vip zs
⚠️ 警告:强制推送会直接替换远程 zs 分支的所有提交记录,若有其他开发者提交过代码,会导致他们的修改丢失,仅适用于个人专属仓库。