💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 合并改动 保持你的提交只在独立分支环境下是很有意义的。但是当你想要将这个提交的改动整合到别的分支中去时,就会需要一些额外的工作。例如,你完成了一个新功能的开发,你想要把这个功能整合到你的 “产品” 分支中去。或者相反的流程,你正在一个分支中开发这个新的功能,同时在你所开发项目中发生了一些改变(比如一些严重的错误被修复了),你很需要这些改动也能被整合到你正在使用的分支中。 无论是哪一种情况我们都称这种整合叫做 “合并(merging)”。在 Git 中我们使用 “git merge” 命令来进行合并的操作。 ##### 概念 #### 整合分支-不是单独提交 在开始准备合并时,你不必(当然也不能)把那些要整合的改动打包为一个_单独的提交_。相反,你要告诉 Git ,你想要和那个_分支(branch)_进行整合,Git 会从那个分支中判断出哪些提交还没有被整合到你当前工作的 HEAD 分支中。只有这些提交才会被整合进来。 此外,你不需要去考虑这些改动最终会到了哪里,整合的目标永远是你的当前的 HEAD 分支,也就是你的工作副本。 ![basic-merging](https://box.kancloud.cn/2016-05-04_572967da5db81.png) 在 Git 中,进行合并是非常简单方便的。它只需要两个步骤: * (1) 切换到那个需要接收改动的分支上。 * (2) 执行 “git merge” 命令,并且在后面加上那个将要合并进来的分支的名称。 来让我们把 “contact-form” 分支的改动合并到 “master” 中去: ``` $ git checkout master $ git merge contact-form ``` 现在如果你执行 “git log” 命令,你会看到那个提交 “Add new contact form page” 已经被成功地合并到 master 分支中来了! ``` $ git log commit 56eddd14cf034f4bcb8dc9cbf847b33309fa5180 Author: Tobias Günther <support@learn-git.com> Date: Fri Jul 26 10:56:16 2013 +0200 Add new contact form page commit 2dfe283e6c81ca48d6edc1574b1f2d4d84ae7f1 Author: Tobias Günther <support@learn-git.com> Date: Fri Jul 26 10:52:04 2013 +0200 Implement the new login box commit 2b504bee4083a20e0ef1e037eea0bd913a4d56b6 Author: Tobias Günther <support@learn-git.com> Date: Fri Jul 26 10:05:48 2013 +0200 Change headlines for about and imprint ``` 然而,合并操作的结果并不是都能很清楚地被显示出来。 Git 并不是简单地将那些需要的提交整合到你的 HEAD 分支中去,它经常会结合出一个新的改动,然后执行 “merge commit” 进行一次单独的提交。你可以把这种提交想象成连接两个分支的节点。 ![merge-commit](https://box.kancloud.cn/2016-05-04_572967da7cb6e.png) 你可以随时经常性地合并两个分支。每次 Git 都会检查那个将要合并进来的分支上的提交,并且只整合那些还没有合并过的提交。 ##### 参考 有时进行合并操作会产生一个或多个 “合并冲突(merge conflicts)”,在这种情况下 Git 就不能自动地连接那些改动。例如,在两个分支中都修改了同一个文件的同一行,这时你要自己来决定哪些改动是你想要最终保留的。我们将在本书之后的章节里会为你介绍这方面的操作 [处理合并冲突](https://www.git-tower.com/learn/git/ebook/cn/command-line/advanced-topics/merge-conflicts)。