我有两个分支,ServerA
和ServerB
。两个分支中的代码几乎相同,但不完全相同。ServerB
是过去从ServerA
分支出来的。我想创建一个新的dev
分支,其中的代码更改将合并到两个服务器分支中。
我可以通过分支ServerA
来创建dev
,但我不希望ServerA的差异转移到ServerB
,反之亦然。
或者,我可以创建一个单独的devA
和devB
分支,但是这两个分支共有的更改必须执行两次,每个dev分支一次。
是否有一种方法可以创建一个dev
分支,我可以将其合并到两个服务器分支中,并且还允许我继续在每个服务器分支上进行特定于服务器的更改?
我尝试过合并,可能是一个孤立分支或重新设置新分支的基?
1条答案
按热度按时间rxztt3cl1#
听起来像是您想追溯实现一个包含所有公共代码的“master”或“main”分支,并让您的“server”分支成为包含特定于服务器的代码的分支。
因为
ServerA
是原始分支,所以在你创建ServerB
之前它一直是master分支,所以我们就从这里开始:1.备份你的回购协议,以防这个过程在某个地方出错。
1.在提交历史中找到
ServerB
从ServerA
分支的提交。1.在此处创建新的
master
分支:1.将两个服务器分支共有的更改合并到
master
中。您可以通过多种方式执行此操作:ServerA
中手动挑选在ServerB
上具有等效提交的提交。如果要在master
中重新创建常见更改的历史记录,请使用此方法。如果从ServerA
中挑选的提交还包括特定于ServerA
的更改,则可以使用git cherry-pick -n
来删除这些特定更改。也可以在每次挑选之后使用git commit --amend
来修复它们。🚩 这个选项将在
master
中重新创建你的原始提交历史记录。但是你的提交历史记录自“分割”以来越长,这个操作所需的时间就越长。这对你来说可能值得也可能不值得。ServerA
和master
,然后使用GUI将属于master
的单个更改复制/合并到master
中,并将这些更改提交到master
中。🚩 此选项将导致自分叉点以来的所有常见更改在
master
中表示为单个提交。1.将
ServerA
的最新状态复制到master
的工作树中,删除所有ServerA
特定的内容,然后将其提交到master
:git checkout master
git checkout master -- .
将工作树的状态更新为master的头,而不切换分支git add -p
,以选择性地仅向索引添加公共改变。git commit
,可能带有一条消息,声明提交包括自ServerA/ServerB拆分以来的所有常见更改。🚩 此选项将导致自分叉点以来的所有常见更改在
master
中表示为单个提交。master
分支中的所有更改都已经在服务器分支中完成了,方法有两种:master
合并到两个服务器分支中,如果你正确地完成了前面的步骤,你可以安全地告诉git接受服务器分支中已经存在的内容来解决所有冲突:由于
master
中的所有更改应该已经在每个服务器分支中,因此它应该是一个空提交,即使使用了上面的冲突解决方法。master
上。如果这也是您要为以后的服务器分支执行的操作,请执行此操作。如果不是,请执行上面描述的merge
。ServerA
的头部和它在这个过程之前的最后一次提交。它应该是一个空的diff。对ServerB
做同样的操作。master
进行比较。您应该在比较中看不到两个服务器共有的任何内容。