git合并教程

常用git分支管理命令,掌握这些命令可以帮助开发者更高效地进行团队协作和项目管理。

名词解释

Git命令速查表

  • 拉取(Pull):从远程仓库获取最新代码并合并到本地分支。命令为 git pull,相当于 git fetchgit merge 的组合。

  • 推送(Push):将本地仓库的提交发送到远程仓库。命令为 git push [远程仓库名] [分支名]

  • 变基(Rebase):将一个分支的修改融合到另一个分支,但不同于合并,变基会重写提交历史,使其更加线性和整洁。命令为 git rebase [目标分支]

  • 挑拣(Cherry-pick):选择特定的提交应用到当前分支,而不是合并整个分支。命令为 git cherry-pick [提交哈希]

  • 暂存(Stage/Add):将修改的文件加入到下一次提交的暂存区。命令为 git add [文件名]

  • 提交(Commit):将暂存区的修改保存为一个新的提交。命令为 git commit -m "提交信息"

  • 签出(Checkout):切换到指定分支或恢复指定文件。命令为 git checkout [分支名/文件名]

  • 合并(Merge):将指定分支的内容合并到当前分支。命令为 git merge [分支名]

  • 冲突(Conflict):当两个分支修改了同一文件的同一部分时,Git无法自动合并而产生的状态。

  • 远程仓库(Remote):存储在网络服务器上的Git仓库,可以与多人共享。

新建分支

新建分支是开发新功能或修复bug的常用方式,它可以让你在不影响主分支的情况下进行开发。

基本用法

1
2
3
4
5
6
7
8
# 创建新分支但不切换
git branch [分支名]

# 创建新分支并立即切换
git checkout -b [分支名]

# Git 2.23版本后的新命令,作用同上
git switch -c [分支名]

从特定提交创建分支

1
2
3
4
5
# 从特定的提交创建分支
git branch [分支名] [提交哈希]

# 创建并切换到该分支
git checkout -b [分支名] [提交哈希]

从远程分支创建本地分支

1
2
3
4
5
# 跟踪远程分支
git checkout -b [本地分支名] origin/[远程分支名]

# 或者使用更简洁的方式
git checkout --track origin/[远程分支名]

切换分支

在不同分支间切换是Git日常工作流的重要组成部分。

基本切换

1
2
3
4
5
# 传统方式切换分支
git checkout [分支名]

# Git 2.23版本后的新命令
git switch [分支名]

强制切换

1
2
# 强制切换,丢弃当前未提交的修改
git checkout -f [分支名]

保留修改并切换

1
2
3
4
5
6
7
8
# 暂存当前修改
git stash

# 切换分支
git checkout [分支名]

# 在新分支应用之前的修改
git stash apply

分支合并

分支合并是团队协作中最常见的操作之一,用于整合不同分支上的修改。

快进合并(Fast-forward)

当目标分支是当前分支的直接后继时,Git会执行快进合并。

1
2
3
4
5
# 切换到目标分支(通常是主分支)
git checkout main

# 合并开发分支
git merge feature-branch

非快进合并(No-fast-forward)

保留分支历史记录的合并方式。

1
git merge --no-ff feature-branch

处理合并冲突

当两个分支修改了同一文件的同一部分时,会产生合并冲突。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 合并时发生冲突
git merge feature-branch
# (出现冲突提示)

# 查看冲突文件
git status

# 手动编辑冲突文件,解决冲突
# 冲突标记通常如下:
# <<<<<<< HEAD
# 当前分支的代码
# =======
# 要合并分支的代码
# >>>>>>> feature-branch

# 解决冲突后,标记为已解决
git add [冲突文件]

# 完成合并
git commit

合并策略选项

1
2
3
4
5
6
7
8
# 使用'ours'策略,保留当前分支的修改
git merge -s ours feature-branch

# 使用'theirs'策略,保留要合并分支的修改
git merge -X theirs feature-branch

# 压缩合并,将所有提交压缩为一个
git merge --squash feature-branch

撤销合并

1
2
3
4
5
# 如果合并后还未推送,可以使用reset撤销
git reset --hard HEAD~1

# 如果已经推送,可以使用revert撤销合并
git revert -m 1 [合并提交的哈希]

删除分支

在分支合并完成后,通常需要删除不再使用的分支以保持仓库整洁。

删除本地分支

1
2
3
4
5
# 删除已合并的分支
git branch -d [分支名]

# 强制删除未合并的分支
git branch -D [分支名]

删除远程分支

1
2
3
4
5
# 删除远程分支
git push origin --delete [分支名]

# 或者使用更简洁的语法
git push origin :[分支名]

清理过时的远程跟踪分支

1
2
3
4
5
# 列出已经不存在于远程的本地分支引用
git remote prune origin --dry-run

# 清理这些引用
git remote prune origin

高级分支管理技巧

分支重命名

1
2
3
4
5
# 重命名当前分支
git branch -m [新名称]

# 重命名指定分支
git branch -m [旧名称] [新名称]

查看分支信息

1
2
3
4
5
6
7
8
9
10
11
# 查看所有分支
git branch -a

# 查看分支详细信息
git branch -v

# 查看已合并到当前分支的分支
git branch --merged

# 查看未合并到当前分支的分支
git branch --no-merged

如何把dev分支的代码应用到master分支上?

如何将 dev 分支的代码应用到 master 分支上
要将 dev 分支的代码应用到 master 分支上,你可以使用以下几种 Git 方法:

方法一:合并(Merge)

这是最常见的方法,将 dev 分支的所有更改合并到 master 中:

1. 切换到 master 分支

git checkout master

2. 确保 master 是最新的

git pull origin master

3. 将 dev 分支合并到 master

git merge dev

4. 解决冲突(如果有的话)

5. 将更改推送到远程仓库

git push origin master

方法二:变基(Rebase)

如果你想要保持一个更干净的提交历史:

1. 切换到 dev 分支

git checkout dev

2. 确保 dev 是最新的

git pull origin dev

3. 切换到 master 分支

git checkout master

4. 确保 master 是最新的

git pull origin master

5. 将 master 变基到 dev 的更改上

git rebase dev

6. 解决冲突(如果有)

7. 将更改推送到远程仓库

git push origin master

方法三:挑选提交(Cherry-pick)

如果你只想将 dev 分支上的特定提交应用到 master:

1. 切换到 master 分支

git checkout master

2. 确保 master 是最新的

git pull origin master

3. 找到你想要应用的提交的哈希值

git log dev

4. 挑选特定的提交

git cherry-pick <提交哈希值>

5. 推送更改到远程仓库

git push origin master

方法四:通过拉取请求(Pull Request)

如果你使用 GitHub、GitLab 等平台:
在平台上创建一个从 dev 到 master 的拉取请求(Pull Request)
审查代码更改
如果没有冲突,直接合并
如果有冲突,解决后再合并