合并两个分支并将两个分支保留在分散的目录中

我有两个分支branch_abranch_b

branch_a

dir_1/a lot of files

branch_b

dir_1/a lot of changes

我现在认为最好不要合并,而是保留两个目录。

所需结果:

dir_1/a lot of files
dir_2/a lot of changes

当然,我可以将所有文件从branch_b复制到dir_2,但这会丢失历史记录。有没有解决的办法?

slxy2009 回答:合并两个分支并将两个分支保留在分散的目录中

如果可能的话,我将避免完全并排放置两份您的内容。这将使两者的合并更加复杂。但是,如果没有更多信息,我无法建议其他方法,所以请按此处。

我假设User.where('created_at > ?',Time.zone.now).order(created_at: :asc).limit(1) branch_a有一些共同的祖先提交,但彼此之间并不简单。如果是这样,这很可能行不通,因为任何合并尝试都会导致快进,包括重命名步骤。

在包含“旧版”版本的branch_b中,将branch_a移至其预期路径:

dir_1

我建议为合并结果创建一个单独的分支,以便您可以执行类似的操作

$ git checkout branch_a
$ git mv dir_1 dir_1-legacy
$ git commit -m 'Created separate folder'

如果您只想用结果更新$ git checkout -b branch_transition branch_b ,请这样做

branch_b

无论哪种情况,您现在都可以在两个文件夹中合并,保留每个文件夹的历史记录:

$ git checkout branch_b

对于失败的自动合并,必须执行步骤$ git merge branch_a CONFLICT (modify/delete): dir_1/XXX deleted in a and modified in HEAD. Version HEAD of dir_1/XXX left in tree. ... Automatic merge failed; fix conflicts and then commit the result. $ git add dir_1 $ git commit -m 'Merged divergent paths' ,这恰好是您在这种情况下想要的。

我还建议将git add dir_1退回一次提交,以使以后的任何更改都不会在branch_a文件夹上起作用:

dir_1-legacy

重新合并

转换完成后,您可以使用类似的技术重新合并两个文件夹。假设您在git checkout branch_a git reset --hard HEAD~ 上,并且希望将两个文件夹合并在一起。为此,您可以创建一个新的临时分支,在每个分支中删除该文件夹的一个版本,重命名一个版本,然后合并:

branch_transition

根据我的实验,您将需要使用git checkout branch_transition # Create temp branch to hold the legacy code git checkout -b temp_transition git rm dir_1 git mv dir_1-legacy dir_1 git commit -m 'Converted legacy to baseline' # Set up merge on the transition branch git checkout branch_transition git rm dir_1-legacy # Do the merge git merge --strategy ours temp_transition git branch -d temp_transition 来获得非传统版本,以胜过传统版本。这与--strategy ours的操作不同,后者无法正常工作。

本文链接:https://www.f2er.com/3165644.html

大家都在问