在GIT中合并2个分支

dot*_*tty 104 git merge commit

我刚刚开始使用GIT并认为它很精彩,但我对merge命令的作用有点困惑.

让我们说我们在分支"A"中有一个工作项目.

我回家对这个分支进行更改并将其保存为"B".另一个程序员对"A"进行更改并将其保存为"C".

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

或者我错过了"合并"的观点?

kni*_*ttl 169

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"
Run Code Online (Sandbox Code Playgroud)

所以现在有三个不同的分支(即AB和C)

将B和C的更改返回到A,结帐A(已在此​​示例中完成),然后使用merge命令:

# create an octopus merge
$ git merge B C
Run Code Online (Sandbox Code Playgroud)

你的历史会看起来像这样:

…-o-o-x-------A
      |\     /|
      | B---/ |
       \     /
        C---/
Run Code Online (Sandbox Code Playgroud)

如果你想跨存储库/计算机边界合并,看看git pull命令,例如从带有分支A的pc(这个例子将创建两个新的提交):

# pull branch B
$ git pull ssh://host/… B
# pull branch C
$ git pull ssh://host/… C
Run Code Online (Sandbox Code Playgroud)

  • @dotty:虽然git经常*似乎*像魔术一样,它实际上无法读懂你的想法 - 如果两个分支对同一内容进行两次不同的更改,只有一个人可以弄清楚如何调和它们.这就是合并冲突. (17认同)

Moh*_*ban 19

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

  1. 你应该在MainBranch上 # git checkout MainBranch

  2. 然后运行merge命令 #git merge SubBranch

  • @luckytaxi:同意,有时少即是多 (7认同)

kis*_*HoR 5

案例:如果需要忽略默认创建的合并提交, follow these steps.

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

  • “添加A”、“添加B”

Checkout a new feature_branch

  • “添加C”,“添加D”

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

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

在此输入图像描述

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

这会将所有提交添加到 master 分支中(master 中的 4 个 + feature_branch 中的 2 个 = 总计 6)+ 一个额外的合并提交,例如'Merge branch 'feature_branch'' as the master is diverged

如果您确实需要忽略此合并提交并添加为新提交'Integrated feature branch changes into master',请运行git merge feature_merge --no-commit

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

编辑 2023:您现在可以选择在较新版本的 git 中以交互方式更改合并提交,而无需指定 --no-commit 选项。

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