| 参数 | 说明 |
|---|---|
-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。你需要手动编辑冲突文件,或者要取消合并尝试,可以运行: