参数 说明
-m 合并提交中包含的消息
-v 显示详细输出
--abort 尝试将所有文件恢复到合并前的状态
--ff-only 如果需要创建合并提交,则立即中止合并
--no-ff 强制创建合并提交,即使不需要合并提交
--no-commit 假设合并失败,以便检查和调整合并结果
--stat 合并完成后显示差异统计信息
-n/--no-stat 不显示差异统计信息
--squash 允许在当前分支上创建一个包含合并更改的单个提交

8.1 自动合并

当两个分支上的提交不冲突时,Git 可以自动合并它们:

~/Stack Overflow(branch:master) » git merge another_branch
Auto-merging file_a
Merge made by the 'recursive' strategy.
file_a | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

8.2 查找所有未合并更改的分支

有时你可能有一些分支,它们的更改已经合并到 master 中。此命令可以查找除 master 之外的所有没有独特提交的分支。这非常有用,用于查找在合并到 master 后未删除的分支。

for branch in $(git branch -r) ; do
[ "${branch}" != "origin/master" ] && [ $(git diff master...${branch} | wc -l) -eq 0 ] && echo -
e `git show --pretty=format:"%ci %cr" $branch | head -n 1`\\t$branch
done | sort -r

8.3 中止合并

在开始合并后,如果你想要停止合并并恢复到合并前的状态,可以使用 --abort:

git merge --abort

8.4 带提交的合并

默认行为是当合并作为快速前进时,只更新分支指针,而不创建合并提交。使用 --no-ff 来解决。

git merge <branch_name> --no-ff -m "<commit message>"

8.5 仅保留合并的一侧更改

在合并过程中,你可以通过传递 --ours 或 --theirs 到 git checkout 来选择文件的所有更改来自合并的哪一侧。

$ git checkout --ours -- file1.txt # 使用我们的版本,删除他们的所有更改
$ git checkout --theirs -- file2.txt # 使用他们的版本,删除我们的所有更改

8.6 将一个分支合并到另一个分支

git merge incomingBranch

这将把 incomingBranch 合并到你当前所在的分支中。例如,如果你当前在 master 分支,那么 incomingBranch 将被合并到 master。

合并可能会在某些情况下产生冲突。如果发生这种情况,你会看到消息 Automatic merge failed; fix conflicts and then commit the result。你需要手动编辑冲突文件,或者要取消合并尝试,可以运行: