目录标题
[Q&A] git merge 作用
用于将一个或多个分支的更改合并到当前分支中。这个操作通常发生在你已经在一个特性分支上完成了一些工作,并希望将这些更改合并回主分支。
场景1:本地 分支间 合并
git merge dev 在本地maste分支上执行, git会把 dev分支 合并到 master分支上
场景2:远程dev分支 合并到 本地dev分支
1、 git checkout dev
2、 git fetch
3、 git merge 在本地dev分支上执行,git会把 refs/remotes/origin/dev分支 合并到 refs/heads/dev分支上
1、 git checkout dev
2、 git pull
场景3:远程release分支 合并到 本地dev分支
3.1・最省事 + 最严谨 + 最高效
1、 git checkout dev
2、 git pull origin release
1、 git checkout dev
2、 git fetch
2、 git fetch origin
2、 git fetch origin release
3、 git merge origin/release 将远程仓库(origin)的release分支合并到你当前所在的本地分支
3.2・本地分间merge
1、 git checkout release
2、 git pull
3、 git checkout dev
4、 git merge release
3.3・主要需知道FETCH_HEAD含义,此方法太浪仅做了解即可
1、 git checkout dev
2、 git fetch origin release
3、 git merge FETCH_HEAD
常见合并场景
1・Merge (Fast-Forward)
当使用fast-forward模式进行合并时,不会产生新的commit节点。不能够使用fast-forward模式进行合并时将拒绝合并,并返回一个失败状态。默认情况下,git merge采用fast-forward模式。
git checkout master
git merge --ff my-branch
2・Merge (No-Fast-Forward)
即使可以使用fast-forward模式,也要创建一个新的合并节点。这是当git merge在合并一个tag时的默认行为。
git checkout master
git merge --no-ff my-feature
3・Merge (Recursive)
recursive是默认合并策略。
在使用recursive策略进行合并时,如果遇到冲突,Git会暂停合并过程,让您手动解决这些冲突。
解决冲突的基本步骤如下:
1・查找冲突文件:Git会标记出有冲突的文件。
2・编辑冲突文件:打开这些文件,找到Git标记的冲突区域(通常以<<<<<<<, =======, 和 >>>>>>>标记),手动决定如何解决冲突。
3・添加并提交更改:解决冲突后,使用git add命令将解决冲突后的文件添加到暂存区,然后使用git commit完成合并。
4・Squash & Merge
不会保留被合并分支的提交历史,而是将这些更改压缩成一个单一的新提交。
# 切换到接收更改的目标分支(如main)
git checkout main
# 执行 squash 合并,将my-branch的更改合并进来,但不保留其提交历史
git merge --squash my-branch
# 查看暂存区的更改,确认即将提交的内容
git status
# 提交合并后的更改,记得添加一个详细的提交信息
git commit -m "Squashed commit of my-branch: Implemented XYZ feature"
5・Rebase & Merge
git checkout my-branch
git rebase main
git checkout main
git merge my-branch
参考
图 参考(Merge, Squash & Merge, Rebase & Merge)
Further Reading :Git常用命令汇总