Git分支合并咨询:merge含义及branch_1变更同步至branch_2方法
Git分支操作问题解答
一、将branch_1的最新变更应用到branch_2的方法
由于branch_1已经通过压缩合并重写了历史(把commit1、commit2替换成一个压缩提交),直接合并会导致代码重复或冲突,推荐使用**变基(rebase)**操作,步骤如下:
- 确保本地branch_1是最新状态:
git checkout branch_1 # 若为远程仓库同步分支,需执行 git pull - 切换到目标分支branch_2:
git checkout branch_2 - 执行变基操作,将branch_2的提交基于branch_1的最新版本重新构建:
git rebase branch_1- 若branch_2上没有新增提交,变基后branch_2会直接对齐branch_1的最新提交(commit4);
- 若branch_2有自定义提交,Git会尝试将这些提交移到branch_1最新提交之后,过程中可能出现冲突,解决冲突后执行
git add <冲突文件>,再用git rebase --continue完成变基。
如果不想修改branch_2的历史,也可以选择创建新分支:基于branch_1新建分支,再用git cherry-pick把branch_2上的自定义提交迁移过来,但这种方式不如变基简洁。
二、merge操作的含义
1. merge branch_1到branch_2
切换到branch_2后执行git merge branch_1,核心是把branch_1中相对于两个分支共同祖先的所有变更,合并到branch_2中。但在当前场景下,由于branch_1重写了历史,共同祖先是branch_1最初的起点,合并后branch_2会同时保留旧的commit1、commit2和branch_1的压缩提交、commit3、commit4,导致代码重复,因此不推荐使用。
2. 反向操作(merge branch_2到branch_1)
切换到branch_1后执行git merge branch_2,是把branch_2中相对于共同祖先的变更合并到branch_1中。同样因为历史重写的问题,branch_2的旧commit1、commit2会被再次合并到branch_1,造成代码冗余,还会生成一个合并提交污染branch_1的线性历史,这种操作也不建议。
内容的提问来源于stack exchange,提问作者dosytres
相关产品推荐
相关产品推荐

