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)
答案 0 :(得分:1)
标识您的共同祖先修订提交哈希。在下面的所有图像中,这都用红色星号标识。我将使用a9c146a09505837ec03b
作为示例哈希。
a。 git show
或gitk
可以为此提供帮助
签出一个以该哈希为首的新分支(即Branch B
)
a。 git checkout -b Branch_B a9c146a09505837ec03b
将Branch A
中的特定文件检出到新分支Branch B
中。
a。即git checkout Branch_A -- "A.file"
,或者,如果您想保留提交消息,则可以使用git cherry-pick
,但前提是文件的更改没有混入同一提交中。如果您必须拆分提交,则最好使用上面的示例使用checkout
。您将丢失历史记录,但是如果您确实需要保留历史记录,则也可以git checkout
对特定的提交哈希值进行遍历,并按顺序浏览文件突变。肯定会严重头痛。
请记住,您的哈希值将会改变。
根据需要重复步骤2和3,以创建所需的分支数量。避免跨多个分支更改同一内容,这将导致合并冲突。
一些例子: