用文件划分Git分支

时间:2019-03-16 17:58:23

标签: git github

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)

1 个答案:

答案 0 :(得分:1)

  1. 标识您的共同祖先修订提交哈希。在下面的所有图像中,这都用红色星号标识。我将使用a9c146a09505837ec03b作为示例哈希。

    a。 git showgitk可以为此提供帮助

  2. 签出一个以该哈希为首的新分支(即Branch B

    a。 git checkout -b Branch_B a9c146a09505837ec03b

  3. Branch A中的特定文件检出到新分支Branch B中。

    a。即git checkout Branch_A -- "A.file"

,或者,如果您想保留提交消息,则可以使用git cherry-pick,但前提是文件的更改没有混入同一提交中。如果您必须拆分提交,则最好使用上面的示例使用checkout。您将丢失历史记录,但是如果您确实需要保留历史记录,则也可以git checkout对特定的提交哈希值进行遍历,并按顺序浏览文件突变。肯定会严重头痛。

请记住,您的哈希值将会改变。

根据需要重复步骤2和3,以创建所需的分支数量。避免跨多个分支更改同一内容,这将导致合并冲突。


一些例子:

Current State

Example with no common files

Example with common file changes