如何使用 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/module1
和 devel/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 代码)所做的更改?如果不是,这可能会造成比解决更多的麻烦(特别是如果并发部署的需求是临时的)。
我必须向我们应用程序中的某些模块添加一些新功能,因此我创建了一个功能分支,并开发了所需的功能。每个模块都封装在一个文件中。完成后,我收到了同时部署新旧功能的请求。我当前的树看起来像这样:
- 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
的情况下做到这一点?
嗯,如果这确实是你想要做的,最简单的解决方案是这样的:
检查你的分支。
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 代码)所做的更改?如果不是,这可能会造成比解决更多的麻烦(特别是如果并发部署的需求是临时的)。