git - 按文件划分 Git 分支

标签 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. 确定您的共同祖先修订提交哈希。在下面的所有图像中,这都用红色星号标识。我将使用 a9c146a09505837ec03b 作为示例哈希。

    a. git showgitk 可以帮助解决这个问题

  2. checkout 一个以该哈希为头的新分支(即分支 B)

    a. git checkout -b Branch_B a9c146a09505837ec03b

  3. 分支 A 中的特定文件 check out 到新分支分支 B

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

或者,如果您想保留提交消息,您可以使用gitcherry-pick,但前提是对文件的更改未混合在同一提交中。如果您必须拆分提交,那么最好将上面的示例与 checkout 一起使用。您将丢失您的历史记录,但如果您确实需要保留它,您也可以在特定提交哈希上进行 git checkout 并遍历您的历史记录,按顺序引入文件突变。确实很头疼。

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

根据您想要创建的分支数量,重复步骤 2 和 3。避免跨多个分支更改相同内容,这将导致 merge 冲突。


一些例子:

Current State

Example with no common files

Example with common file changes

关于git - 按文件划分 Git 分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55199876/

相关文章:

github - 通过工作流运行时,拉取请求未检测到操作

documentation - mediawiki 在线所见即所得编辑器或预览工具

linux - 如何在 Linux (Centos) 机器上安装此软件包?

git - 如何可靠地检查文件是否被 git 忽略?

git - Windows git shell 的 Tput 颜色定义

git - 如何清除窗口git bash中的github自动登录?

github - 您如何跟踪或收到 GitHub wiki 更改的通知?

javascript - 使用 GitHub API 检索具有特定扩展名的文件

git 删除 Remote : remote refs do not exist

git - 从 RStudio 推送到 Github