使用Git将一个分支合并到两个不同的分支上

lxkprmvk  于 2022-12-21  发布在  Git
关注(0)|答案(1)|浏览(348)

我有两个分支,ServerAServerB。两个分支中的代码几乎相同,但不完全相同。ServerB是过去从ServerA分支出来的。我想创建一个新的dev分支,其中的代码更改将合并到两个服务器分支中。
我可以通过分支ServerA来创建dev,但我不希望ServerA的差异转移到ServerB,反之亦然。
或者,我可以创建一个单独的devAdevB分支,但是这两个分支共有的更改必须执行两次,每个dev分支一次。
是否有一种方法可以创建一个dev分支,我可以将其合并到两个服务器分支中,并且还允许我继续在每个服务器分支上进行特定于服务器的更改?
我尝试过合并,可能是一个孤立分支或重新设置新分支的基?

rxztt3cl

rxztt3cl1#

听起来像是您想追溯实现一个包含所有公共代码的“master”或“main”分支,并让您的“server”分支成为包含特定于服务器的代码的分支。
因为ServerA是原始分支,所以在你创建ServerB之前它一直是master分支,所以我们就从这里开始:
1.备份你的回购协议,以防这个过程在某个地方出错。
1.在提交历史中找到ServerBServerA分支的提交。
1.在此处创建新的master分支:

git branch master <SHA-1 or other ref for last common commit>

1.将两个服务器分支共有的更改合并到master中。您可以通过多种方式执行此操作:

  • ServerA中手动挑选在ServerB上具有等效提交的提交。如果要在master中重新创建常见更改的历史记录,请使用此方法。如果从ServerA中挑选的提交还包括特定于ServerA的更改,则可以使用git cherry-pick -n来删除这些特定更改。也可以在每次挑选之后使用git commit --amend来修复它们。

🚩 这个选项将在master中重新创建你的原始提交历史记录。但是你的提交历史记录自“分割”以来越长,这个操作所需的时间就越长。这对你来说可能值得也可能不值得。

  • 使用IDE或Git GUI前端比较ServerAmaster,然后使用GUI将属于master的单个更改复制/合并到master中,并将这些更改提交到master中。

🚩 此选项将导致自分叉点以来的所有常见更改在master中表示为单个提交。
1.将ServerA的最新状态复制到master的工作树中,删除所有ServerA特定的内容,然后将其提交到master

  1. git checkout master
  2. git checkout master -- .将工作树的状态更新为master的头,而不切换分支
  3. git add -p,以选择性地仅向索引添加公共改变。
  4. git commit,可能带有一条消息,声明提交包括自ServerA/ServerB拆分以来的所有常见更改。
    🚩 此选项将导致自分叉点以来的所有常见更改在master中表示为单个提交。
  • 让git历史记录反映出master分支中的所有更改都已经在服务器分支中完成了,方法有两种:
  • master合并到两个服务器分支中,如果你正确地完成了前面的步骤,你可以安全地告诉git接受服务器分支中已经存在的内容来解决所有冲突:
git checkout ServerA
git merge -s ours master

由于master中的所有更改应该已经在每个服务器分支中,因此它应该是一个空提交,即使使用了上面的冲突解决方法。

  • 将两个服务器分支都重定到master上。如果这也是您要为以后的服务器分支执行的操作,请执行此操作。如果不是,请执行上面描述的merge
  • 确认每个分支的最终状态正确。
  • 比较ServerA的头部和它在这个过程之前的最后一次提交。它应该是一个空的diff。对ServerB做同样的操作。
  • 将每个服务器分支与master进行比较。您应该在比较中看不到两个服务器共有的任何内容。
  • 喝一杯🥃或一些🍨。

相关问题