在 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
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 个分支的主要内容,如果未能解决你的问题,请参考以下文章