Git 分支 A 修改了许多文件(大约 50 个文件左右),这些文件是随着时间的推移而修改的,有时是在同一次提交中修改的:
示例:
File A
File B
File C
File AA
File BB
File CC
File ZZ
我想将文件更改拆分为两个分支,文件 A、B、C、ZZ 将在分支 A 中,文件 AA、BB、CC、ZZ 将在分支 B 中。我需要一个通用文件。
有办法做到这一点吗?如果是这样怎么办?
示例:
Master --------\
\
\- - - - -- Branch A (Files, A,B,C,AA,BB,CC, ZZ)
Goal:
Master --------\
|\
| \- - - Branch A (Files, A,B,C, ZZ)
|
|-------- Branch B (Files, AA,BB,CC,ZZ)
最佳答案
确定您的共同祖先修订提交哈希。在下面的所有图像中,这都用红色星号标识。我将使用
a9c146a09505837ec03b
作为示例哈希。a.
git show
或gitk
可以帮助解决这个问题checkout 一个以该哈希为头的新分支(即
分支 B
)a.
git checkout -b Branch_B a9c146a09505837ec03b
将
分支 A
中的特定文件 check out 到新分支分支 B
。a.即
git checkout Branch_A -- "A.file"
或者,如果您想保留提交消息,您可以使用gitcherry-pick
,但前提是对文件的更改未混合在同一提交中。如果您必须拆分提交,那么最好将上面的示例与 checkout
一起使用。您将丢失您的历史记录,但如果您确实需要保留它,您也可以在特定提交哈希上进行 git checkout 并遍历您的历史记录,按顺序引入文件突变。确实很头疼。
请记住,您的哈希值将会改变。
根据您想要创建的分支数量,重复步骤 2 和 3。避免跨多个分支更改相同内容,这将导致 merge 冲突。
一些例子:
关于git - 按文件划分 Git 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55199876/