开发流程

1、克隆远程版本库
shell
## 格式
git clone <url>
## 案例
git clone https://xxx/demo.git2、新建开发分支
shell
## 格式
git checkout –b <name>
## 案例
git checkout –b dev然后回车即可、创建分支并切换到该分支, 可以通过 git branch查看。默认情况下都是属于 master 分支
3、将修改的文件添加到暂存区
shell
## 格式
git add
## 案例。注意,有个 . 。 . 代表该目录下所有文件
git add .
## 指定某个文件
git add a.txt可以通过 git status -s 查看。
4、提交暂存区到仓库区
shell
## 格式
git commit
## 只提交你明确 add 过的内容
git commit -m '创建 a.txt 文件'
## 自动 add 所有已跟踪文件的修改,然后提交(不会添加新文件)
git commit -am '创建 a.txt 文件'5、查看历史提交记录
shell
## 查看提交历史
git log
## 查看指定文件的提交历史
git log -p a.txt6、获取别人提交的最新代码
shell
# 完整命令格式
git pull <远程仓库名> <远程分支名>:<本地分支名>
# 最常用形式
git pull origin main
# 场景1:将远程 main 拉取到本地的 feature 分支
git pull origin main:feature
# 场景2:将远程 develop 拉取到本地的 main 分支
git pull origin develop:main7、将本地代码推送到远程服务器
shell
## 格式
git push <远程仓库名> <本地分支名>:<远程分支名>
# 首次推送,建立跟踪关系
git push -u origin feature/login
# -u = --set-upstream,之后可以直接用 git push
# 第二次及以后推送
git push # 自动推送到关联的远程分支8、合并分支
dev 分支合并到 master 分支完整指南
一、标准合并步骤
shell
# 1. 切换到 master 分支
git checkout master
# 2. 确保 master 是最新的(如果有远程仓库)
git pull origin master
# 3. 合并 dev 分支到 master
git merge dev
# 4. 如果有冲突,解决冲突后提交
# (见下方冲突处理)
# 5. 推送到远程仓库
git push origin master二、完整工作流示例
场景1:无冲突合并
shell
# 初始状态
git branch
# * dev
# master
# 1. 切换到 master
git checkout master
# Switched to branch 'master'
# 2. 查看当前状态
git status
# On branch master
# Your branch is up to date with 'origin/master'
# 3. 合并 dev
git merge dev
# 输出:Updating a1b2c3d..e4f5g6h
# Fast-forward
# index.js | 5 +++++
# 1 file changed, 5 insertions(+)
# 4. 推送到远程
git push origin master场景2:产生合并提交的合并
shell
# 当 master 和 dev 都有新提交时
git checkout master
git merge dev
# 输出:Merge made by the 'recursive' strategy.
# 自动打开编辑器让你输入合并信息
# 保存合并信息后
# [master a1b2c3d] Merge branch 'dev'
git push origin master场景3:使用 --no-ff 保留分支历史
shell
# 强制创建合并提交(即使可以快进)
git checkout master
git merge --no-ff dev -m "合并 dev 分支到 master"
git push origin master三、处理冲突的详细步骤
1. 合并时遇到冲突
shell
git checkout master
git merge dev
# 输出冲突信息
# Auto-merging index.js
# CONFLICT (content): Merge conflict in index.js
# Automatic merge failed; fix conflicts and then commit the result.2. 查看冲突文件
shell
git status
# On branch master
# You have unmerged paths.
# (fix conflicts and run "git commit")
#
# Unmerged paths:
# both modified: index.js3. 解决冲突
shell
# 方法1:手动编辑冲突文件
# 打开 index.js,删除 <<<<<<<, =======, >>>>>>> 标记
# 保留需要的内容
# 方法2:使用工具
git mergetool
# 方法3:使用我们的版本(master的版本)
git checkout --ours index.js
git add index.js
# 方法4:使用他们的版本(dev的版本)
git checkout --theirs index.js
git add index.js4. 完成合并
shell
# 标记冲突已解决
git add index.js
# 提交合并
git commit -m "merge: 解决 index.js 冲突,合并 dev 到 master"
# 推送
git push origin master5. 放弃合并(如果解决不了)
shell
# 回到合并前的状态
git merge --abort四、推荐的最佳实践
完整的安全合并流程
shell
# 1. 确保工作区干净
git status
# 2. 切换到 master 并更新
git checkout master
git pull origin master
# 3. 切换到 dev 并同步 master
git checkout dev
git merge master
# 或使用 rebase
git rebase master
# 4. 解决 dev 上的冲突(如果有)
# ... 解决冲突 ...
git add .
git commit -m "merge: 同步 master 到 dev"
# 5. 切换回 master 并合并 dev
git checkout master
git merge --no-ff dev -m "合并 dev 分支"
# 6. 推送 master
git push origin master
# 7. (可选)推送 dev
git push origin dev五、不同合并方式对比
| 方式 | 命令 | 特点 | 适用场景 |
|---|---|---|---|
| 快进合并 | git merge dev | 线性历史,无合并提交 | dev 完全基于 master |
| 禁止快进 | git merge --no-ff dev | 保留分支信息 | 需要清晰记录功能分支 |
| 压缩合并 | git merge --squash dev | 将所有提交压缩成一个 | dev 提交太多且杂乱 |
| 变基后合并 | git rebase master + git merge | 最干净的历史 | 个人/小团队协作 |
六、不同场景的命令选择
场景1:dev 完全基于 master,且 master 没有新提交
shell
git checkout master
git merge dev # 快进合并,最简单
git push origin master场景2:dev 和 master 都有新提交
shell
git checkout master
git merge --no-ff dev # 产生合并提交,便于追溯
git push origin master场景3:dev 提交太多且杂乱
shell
git checkout master
git merge --squash dev # 压缩成一个提交
git commit -m "feat: 合并 dev 的所有功能"
git push origin master场景4:希望保持线性历史
shell
git checkout dev
git rebase master # 将 dev 变基到 master 最新
git checkout master
git merge dev # 快进合并
git push origin master七、合并后清理
shell
# 1. 删除本地 dev 分支(如果不再需要)
git branch -d dev
# 2. 删除远程 dev 分支
git push origin --delete dev
# 3. 查看分支状态
git branch -a
枫渡札记