在GIT中合并2个分支


130

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

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

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

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

还是错过了“合并”的要点?


无需在另一个分支中“保存更改”。工作一个A,然后将那些不同的A合并在一起
knittl

我不懂 A在我的本地计算机上,dev1在他的计算机上有A的副本,而dev2在他的计算机上有A的副本。两个开发人员都进行更改,如何将这些更改合并在一起?

请参阅< kernel.org/pub/software/scm/git/docs/git-pull.html >。开发人员可能需要先将其存储库推入/上传
-knittl

Answers:


195

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"

所以现在有三个独立的分支(分别为AB和C),它们的头不同

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

# create an octopus merge
$ git merge B C

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

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

如果要跨存储库/计算机边界合并,请查看git pull命令,例如从具有分支A的PC中进行命令(此示例将创建两个新的提交):

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

这意味着两个分支确实更改了同一段代码。解决问题,git add conflicting_files然后git commit
knittl

假设A中的文件包含单词“ hello”,A将其修改为“ HELLO”,B将其修改为“ Hello world”。合并这些文件会有什么结果?

糟糕,我的意思是B修改了C,C修改了。

请小心使用“修改”一词,这意味着git有所不同(更改现有提交)。在一侧将文件“ hello”更改为“ HELLO”,在另一侧更改文件“ Hello World”将导致合并冲突
knittl

19
@dotty:虽然git通常看起来很神奇,但实际上并不能读懂您的想法-如果两个分支对同一内容进行了两次不同的更改,那么只有人类才能弄清楚如何协调它们。这就是合并冲突。
卡斯卡贝尔


0

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

假设已经从master检出了一个新的功能分支,该分支已经进行了2次提交,

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

Checkout a new feature_branch

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

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

  • “添加的E”,“添加的F”

在此处输入图片说明

现在,如果要将feature_branch更改合并到母版,请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'Run)添加git merge feature_merge --no-commit

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

在这里阅读更多信息:https : //git-scm.com/docs/git-merge

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.