【问题标题】:How to merge back renamed files from one branch to the original branch as new ones with git?如何使用 git 将重命名的文件从一个分支合并回原始分支作为新分支?
【发布时间】:2018-05-10 14:10:49
【问题描述】:

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

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

我认为保留旧功能并同时获取新功能的最简单方法是将 feature/module1 重命名为 feature/module3feature/module2 重命名为 feature/module4,然后将功能分支文件添加到开发分支得到这个:

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

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

【问题讨论】:

  • 所以您将同时发布新旧软件?在这种情况下,听起来您基本上需要您的“功能分支”成为“发布分支”?
  • 不,我需要 devel 分支中的所有四个模块。我稍微整理了一下这个例子。
  • 在您的最新示例中,您显示的 feature 仅包含 module3module4;这不会做你想做的事,因为 git 会理解“删除module1module2”作为feature 所做工作的一部分

标签: git git-branch git-merge branching-and-merging


【解决方案1】:

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

检查你的分支。

git checkout feature

将 module1 和 module2 复制到 module3 和 module4(分别)。

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(旧的module1 代码)进行的更改?如果不是,这可能会导致比它解决的问题更多的麻烦(尤其是在临时需要并发部署的情况下)。

【讨论】:

  • 谢谢,通过git reset 方法,我能够解决我的问题。对于您的最后一个问题:是的,在此合并后模块应该变得独立。这有点像 A/B 测试,如果新模块按预期工作,旧模块应该退役。
猜你喜欢
  • 1970-01-01
  • 2019-03-11
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-09
  • 2017-10-11
相关资源
最近更新 更多