在 GIT 中合并 2 个分支

Posted

技术标签:

【中文标题】在 GIT 中合并 2 个分支【英文标题】:Merging 2 branches together in GIT 【发布时间】:2011-03-25 04:11:47 【问题描述】:

我才刚刚开始使用 GIT 并认为它很棒,但是我对 merge 命令的作用有点困惑。

假设我们在分支“A”中有一个工作项目。

我回家对这个分支进行更改并将其保存为“B”。 另一位程序员对“A”进行了更改并将其保存为“C”。

有没有办法将两个分支“B”和“C”合并在一起,然后将更改提交为新分支,比如“D”?

或者我错过了“合并”的意义?

【问题讨论】:

无需在另一个分支中“保存更改”。处理一个 A,然后将这些不同的 A 合并在一起 我不关注。 A 将在我的本地计算机上,dev1 将在他的计算机上拥有 A 的副本,而 dev2 在他的计算机上拥有 A 的副本。两个开发人员都进行了更改,我如何将这些更改合并在一起? 见 kernel.org/pub/software/scm/git/docs/git-pull.html>。开发人员可能需要先在某处推送/上传他们的存储库 【参考方案1】:

merge 用于将两个(或多个)分支放在一起。

一个小例子:

# on branch A:
# create new branch B
$ git checkout -b B
# hack hack
$ git commit -am "commit on branch B"

# create new branch C from A
$ git checkout -b C A
# hack hack
$ git commit -am "commit on branch C"

# go back to branch A
$ git checkout A
# hack hack
$ git commit -am "commit on branch A"

所以现在有三个独立的分支(即 A B 和 C)具有不同的头

要将 B 和 C 的更改返回到 A,请检出 A(在此示例中已完成),然后使用合并命令:

# create an octopus merge
$ git merge B C

您的历史记录将如下所示:

…-o-o-x-------A
      |\     /|
      | B---/ |
       \     /
        C---/

如果您想跨存储库/计算机边界合并,请查看git pull 命令,例如来自具有分支 A 的电脑(此示例将创建两个新提交):

# pull branch B
$ git pull ssh://host/… B
# pull branch C
$ git pull ssh://host/… C

【讨论】:

这意味着两个分支确实更改了同一段代码。解决冲突,git add conflicting_files 然后git commit 假设A中的文件包含单词“hello”,A将其修改为“HELLO”,B将其修改为“Hello world”。合并这些文件会有什么结果? 哎呀,我的意思是B修改了它,C修改了它。 小心“修改”这个词,它在 git 中意味着不同的东西(改变现有的提交)。将文件“hello”一侧更改为“HELLO”,另一侧更改为“Hello World”将导致合并冲突 @dotty:虽然 git 经常似乎像魔术一样,但它实际上并不能读懂你的想法——如果两个分支对同一内容进行两次不同的更改,只有人类可以弄清楚如何调和它们。这就是合并冲突。【参考方案2】:

如果您想将 SubBranch 中的更改合并到 MainBranch

    你应该在 MainBranch git checkout MainBranch 然后运行合并命令git merge SubBranch

【讨论】:

@luckytaxi:同意,有时少即是多 我可以撤消这个吗? @Yohanelly 是的,您可以将 git head 重置为任何提交。 (one the MainBranch) 所以这意味着 git merge SubBranch 其中SubBranch 将是分支将是合并的基础。所以对SubBranch 的任何更改都将应用于MainBranch 对吗?谢谢!我试过了【参考方案3】:

案例:如果您需要忽略默认创建的合并提交,请按照以下步骤操作。

比如说,一个新的特性分支从已经有 2 次提交的 master 签出,

“添加了 A”,“添加了 B”

Checkout a new feature_branch

“添加了 C”、“添加了 D”

Feature 分支然后添加两个提交-->

“添加了 E”、“添加了 F”

现在,如果您想将 feature_branch 更改合并到 master,请在 master 上执行 git merge feature_branch

这会将所有提交添加到 master 分支中(master 中的 4 个 + feature_branch 中的 2 个 = 总共 6 个)+ 一个额外的合并提交,例如 'Merge branch 'feature_branch'',因为 master 是分歧的

如果您确实需要忽略这些提交(在 FB 中进行的提交)并将在 feature_branch 中所做的全部更改添加为单个提交,例如 'Integrated feature branch changes into master',请运行 git merge feature_merge --no-commit

使用 --no-commit,它会在创建合并提交之前执行合并并停止,我们现在将在 master 中拥有功能分支中所有添加的更改,并有机会创建一个新的提交作为我们自己的提交。

阅读此处了解更多信息:https://git-scm.com/docs/git-merge

【讨论】:

以上是关于在 GIT 中合并 2 个分支的主要内容,如果未能解决你的问题,请参考以下文章

Git:将提交合并到不同的分支

Git:无法将功能分支合并到当前分支

Git - 如何合并功能分支,但排除一些提交?

Git不同项目代码分支合并,且仅合并特定提交

GIT使用—分支与合并

Git如何合并分支代码