Rav*_*rsT 12 git git-merge git-subtree git-branch
我有两个Git repos,foo/master和bar/master:
在foo:
code_root
->dirA
->dirB
-> *some files*
Run Code Online (Sandbox Code Playgroud)
在酒吧:
code_root
-> *same files as above*
Run Code Online (Sandbox Code Playgroud)
现在有人对*some files*
... 进行了更改,如何将这些更改合并到一起*same files as above*
?
当我说"合并"时,我的意思是我需要提交增量的历史(提交消息,日志哈希等).
您可以将更改拆分为子树级别,然后与其他分支合并:
# from your foo project
git subtree split --prefix=dirA/dirB/ --branch=temp-branch [--onto=<onto-sub-note1>] [<commit-sub-note2>]
Run Code Online (Sandbox Code Playgroud)
在子笔记1上:似乎自从bar项目存在以来,您必须在某个时间点复制它,并将其作为新库启动,在这种情况下,如果您希望在此之后进行所有更改,那么d 引入更改时指定此栏提交ID.
提交子注释2:然后,您需要指定在第一个位置复制子项目时使用的提交ID,这样您才能获得此后的更改,以便合并到您已经拥有的bar副本中(这将保持你错过的历史).使用这样的语法将commit id本身包含在最新版本中:0abc210^..
你也可以用--rejoin
做一个提交回你富项目,这将使它更容易在以后更改推,如果你想继续发展巴从withing您FOO项目.提交回foo是有点无意义的,除了帮助子树命令库它将来更容易拆分.
运行split命令后,您将位于foo的一个分支中,该分支只包含这些文件.从那里,你可以做一个正常的合并与巴项目或启动新项目和合并条成(因为它可能没有正确的历史).在尝试进行合并之前,您可能想要重新分配到分歧点或其他东西.