git merge 会保留所有提交历史,生成新合并节点而不重写历史;rebase 则重写提交哈希、改变时间戳与sha-1,已推送分支使用会导致历史分裂;cherry-pick 仅复制单个提交,丢失上下文与分支拓扑。

git merge feature_branch 会保留所有提交历史
直接用 git merge 合并功能分支,是保留其完整特性(包括多个 commit、作者信息、时间戳、提交说明)的最稳妥方式。它不改写历史,只新增一个合并提交节点。
- 必须先切换到目标分支(如
main或feature_202602),再执行git merge feature_yxq202602_from_202602 - 如果远程已有该分支,建议先
git pull origin feature_202602同步最新状态,避免冲突升级 - 合并后若出现冲突,Git 会在文件中标记
和 <code>>>>>>> feature_yxq202602_from_202602区段,手动编辑保存后git add . && git commit即可完成
为什么不用 git rebase main?
git rebase 会重写开发分支的全部提交哈希,把每个 commit 重新“贴”到 main 最新提交之后。这会导致:
- 原始 commit 的 author 时间、committer 时间、SHA-1 全部改变
- 如果你已将
feature_yxq202602_from_202602推送到远程,他人基于旧 commit 继续开发,就会产生不可逆的历史分裂 - CI/CD 流水线可能因 commit ID 变更而丢失构建记录或测试结果
merge 后如何避免主分支变“毛”?
多人频繁 merge 会让主分支历史出现大量分叉和合并节点。若团队要求主干线性整洁,又想保留特性完整性,可用 --no-ff 强制生成合并提交:
批量替换指定目录下所有 Git 仓库的远程地址(remote URL)。 当用户需要将 Git 仓库从一个服务器迁移到另一个服务器时使用。 触发词:git remote 替换、git url 批量修改、git 仓库迁移、更换 git 地址、批量修改 remote url。
git checkout main<br>git merge --no-ff feature_yxq202602_from_202602 -m "feat: 用户认证模块集成"
这样既避免 fast-forward 合并导致的 commit 消失,又让每次功能合入都有明确、可追溯的边界标记。
cherry-pick 不适合“保留完整特性”场景
git cherry-pick 是挑个别 commit 复制过去,本质是创建新 commit。它会丢掉原 commit 的上下文链(比如 fixup 提交、WIP 标记、关联 issue 编号),也不保留分支拓扑关系。如果你的目标是“把整个功能分支的演进过程一并带进主干”,cherry-pick 就违背初衷了。
真正容易被忽略的是:合并前没确认 feature_yxq202602_from_202602 是否已包含 origin/feature_202602 的最新变更——漏掉这一步,merge 时看似成功,实则悄悄覆盖了别人刚合入的代码。










