代码之家  ›  专栏  ›  技术社区  ›  Gergely Máté

如何使用git将重命名的文件从一个分支合并回原始分支作为新文件?

  •  0
  • Gergely Máté  · 技术社区  · 8 年前

    我不得不在我们的应用程序中的一些模块中添加一些新功能,所以我创建了一个功能分支,并开发了所需的功能。每个模块封装在一个文件中。完成后,我得到了同时部署新功能和旧功能的请求。我当前的树如下所示:

    - devel
      - module1
      - module2
    - feature
      - module1 (changed)
      - module2 (changed)
    

    我认为保留旧功能并同时获得新功能的最简单方法是重命名 feature/module1 feature/module3 feature/module2 feature/module4 ,然后将要素分支文件添加到devel分支,以获得以下结果:

    - devel
      - module1
      - module2
      - module3
      - module4
    - feature
      - module3
      - module4
    

    我如何在不修改的情况下做到这一点 devel/module1 devel/module2 ?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Mark Adelsberger    8 年前

    好吧,如果这确实是您想要做的,最简单的解决方案是这样的:

    查看您的分支。

    git checkout feature
    

    将模块1和模块2分别复制到模块3和模块4。

    cp module1 module3
    cp module2 module4
    

    然后做以下两件事之一:

    假设这些模块的更改都是您在上所做的 feature ,您可以将索引恢复为启用的索引 master

    git revert -n $(git merge-base feature master)..HEAD
    git add .
    git revert --continue
    

    或者另一种方法,即使您修改了不想还原的其他文件,也可以使用这种方法

    git reset $(git merge-base feature master) -- module1 module2
    git add .
    git commit
    

    现在假设更改在相应的文件中真正本地化(如果没有本地化,那么我怀疑“旧”模块和“新”模块可能无法在同一棵树上共存),这两个模块都应该可以工作。

    但是,我的两分钱,这似乎是您试图使用源代码管理工具来解决部署问题,从长远来看,这可能不是一个好主意。您想继续独立维护这些吗?是否要处理可能对 module1 (旧模块1代码)?如果没有,这可能会带来比解决问题更多的问题(尤其是如果并发部署的需求是暂时的)。