【问题标题】:Merging 2 branches together in GIT在 GIT 中合并 2 个分支
【发布时间】: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>。开发人员可能需要先在某处推送/上传他们的存储库

标签: git merge commit


【解决方案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

  1. 你应该在 MainBranch git checkout MainBranch
  2. 然后运行合并命令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

【讨论】:

    猜你喜欢
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    • 2012-01-24
    • 2012-06-21
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多