Skip to content
章节导航

开发流程

1、克隆远程版本库

shell
## 格式
git clone <url>

## 案例
git clone https://xxx/demo.git

2、新建开发分支

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.txt

6、获取别人提交的最新代码

shell
# 完整命令格式
git pull <远程仓库> <远程分支>:<本地分支>

# 最常用形式
git pull origin main

# 场景1:将远程 main 拉取到本地的 feature 分支
git pull origin main:feature

# 场景2:将远程 develop 拉取到本地的 main 分支
git pull origin develop:main

7、将本地代码推送到远程服务器

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.js

3. 解决冲突

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.js

4. 完成合并

shell
# 标记冲突已解决
git add index.js

# 提交合并
git commit -m "merge: 解决 index.js 冲突,合并 dev 到 master"

# 推送
git push origin master

5. 放弃合并(如果解决不了)

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

风行高山,渡此枫林;聊以寸笔,叙我寸心。