跳至内容
GitTree
Git 指南阅读 1 分钟

如何将一个 Git 分支合并到另一个分支

合并需要两个命令,但方向让人困惑,Git 可能会快进或创建合并提交。以下是确切的顺序、快进的含义以及何时使用哪个选项。

撰写者 Kodmora

GitTree 背后的软件公司

已发表 已更新
  • 合并
  • 分支
  • 合并冲突
在此页面上

要将 `feature` 合并到 `main`,请切换到接收提交的分支,然后合并另一个分支:`git switch main`,后跟 `git merge feature`。 您所在的分支是发生更改的分支。如果 main 没有新提交,Git 会快进。否则,它会创建一个合并提交,并在双方发生冲突时停止。

如何逐步合并分支?

# get the latest
git fetch origin

# go to the branch that receives the work
git switch main
git pull --ff-only

# bring the other branch in
git merge feature/search

# publish it
git push

从干净的树开始:首先提交或存储。如果您中途改变主意,`git merge --abort` 会带您返回。

合并走哪条路?

git merge X 始终意味着“将 X 引入我所在的分支”。因此,将 feature 合并到 main 是从 main 完成的,而使用最新的 main 更新 feature 则是从 feature 完成:

# keep a feature branch up to date
git switch feature/search
git fetch origin
git merge origin/main

什么是快进合并?

如果接收分支自其他分支离开以来没有自己的提交,则没有任何内容可以合并。 Git 将分支指针向前移动到另一个分支的最新提交,并且不添加合并提交。历史始终是一条直线。发生这种情况时,Git 会打印 Fast-forward。

# before
main:    A---B
              \
feature:       C---D

# after a fast-forward merge
main:    A---B---C---D

当两个分支都有新提交时,快进是不可能的,因此 Git 会与两个父分支进行合并提交。 快进课程 和合并分叉分支 课程在实践中展示了两者。

--ff-only、--no-ff 和 --squash 有何作用?

git merge 如何记录结果
选项结果当
(无)如果可能的话快进,否则合并提交大多数日常合并
--ff-only快进或因错误而停止从远程更新 main
--no-ff始终是合并提交您希望每个功能都在历史记录中可见
--squash所有更改均已暂存,无提交,无合并记录你想要一个整洁的提交
git merge --ff-only origin/main
git merge --no-ff feature/search

git merge --squash feature/search
git commit -m "feat(search): quick open"

当合并冲突时会发生什么?

Git 停止并标记冲突的文件。编辑它们,每一项都 git add,然后运行 ​​git commit 以完成合并。 如何解决合并冲突 解释了标记。

我可以自动选择一侧吗?

# take their side wherever hunks conflict
git merge -X theirs feature/search

# take our side wherever hunks conflict
git merge -X ours feature/search

# during a merge, take one side of a whole file
git checkout --theirs path/to/file
git add path/to/file

我应该合并还是变基?

合并完全保留历史记录,并且从不重写提交,因此它在共享分支上始终是安全的。 Rebase 会在另一个分支之上重放您的提交以形成一条直线,但它会重写它们,因此请将其保留在仅您使用的分支上。 合并与变基课程 会进行权衡。

合并后我应该做什么?

# check that the branch is fully merged
git branch --merged

# delete it locally and on the remote
git branch -d feature/search
git push origin --delete feature/search

如何删除分支 涵盖了清理工作。要撤消已推送的合并,请参阅如何恢复合并提交。

如何合并 GitTree 中的分支

  1. 查看接收分支

    双击应接收提交的分支,例如 develop。

  2. 选择要合并的分支

    右键单击包含新作品的分支标签,然后选择“将…合并到…”。您还可以将一个标签拖到另一个标签上。

  3. 阅读预览

    GitTree 首先检查并告诉您无冲突合并。或哪些文件将因冲突而停止。

  4. 选择记录方式

    在“记录为”下,选择“如果可能的话快进,否则合并提交”、“始终合并提交”、“仅快进”或“压缩到分阶段更改(无提交)”,然后按“合并”。

将功能/搜索合并到 GitTree 中的开发中,并在进行任何更改之前进行冲突检查。
将功能/搜索合并到 GitTree 中的开发中,并在进行任何更改之前进行冲突检查。GitTree 与演示存储库的接口。

有关每个选项,请参阅合并分支。

常见问题

合并会删除另一个分支吗?

不,另一个分支仍保留在原来的位置。当您不再需要它时,请自行删除它。

如何将分支合并到 GitHub 上的主分支?

打开拉取请求并按合并。如果您在本地合并,请随后推送 main。分支保护可能需要拉取请求路由。

“已经是最新的”是什么意思?

您所在的分支已经包含其他分支的每个提交,因此无需合并。检查您是否位于正确的分支上,如果您需要新的远程提交,请运行 git fetch。

“拒绝合并不相关的历史”是什么意思?

这两个分支不共享共同的提交,通常是因为存储库被初始化了两次。如果您确实想加入他们,请添加 --allow-unrelated-histories。

压缩合并是真正的合并吗?

压缩合并会暂存汇总的更改,但不会创建提交,也不会记录合并祖先关系。你需要自行提交。之后 Git 仍不会把源分支视为已合并,因此 git branch -d 可能拒绝删除它。

来源

有关其他产品的声明已根据其位于 2026年11月8日 的官方页面进行了检查。价格和功能发生变化;供应商的页面是事实的来源。