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

How to merge back renamed files from one branch to the original branch as new ones with git?

我必须向我们应用程序中的某些模块添加一些新功能,因此我创建了一个功能分支,并开发了所需的功能。每个模块都封装在一个文件中。完成后,我收到了同时部署新旧功能的请求。我当前的树看起来像这样:

- 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/module1devel/module2 的情况下做到这一点?

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

检查你的分支。

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

现在......其中任何一个都应该工作,假设更改确实在各自的文件中本地化(如果没有,那么我怀疑 "old" 和 "new" 模块可能只是无法在同一棵树上共存)。

但是我的两分钱,这似乎是您正在尝试使用源代码控制工具来解决部署问题,并且从长远来看 运行 这可能不是一个好主意。你想继续独立地维护这些吗?您是否要处理可能对 module1(旧的 module1 代码)所做的更改?如果不是,这可能会造成比解决更多的麻烦(特别是如果并发部署的需求是临时的)。